Перезагрузить компоненты калитки после нажатия кнопки с помощью AJAX

Здесь я использую компоненты калитки. Мое мнение, как показано ниже.

Перезагрузить компоненты калитки после нажатия кнопки с помощью AJAX

Мне нужно перегенерировать отчет и перезагрузить рамку отчета нажатием кнопки (GO). Но этот div не перезагружается, даже если я заменил старый элемент новым элементом отчета. Кто-нибудь может мне с этим помочь?

form.add(new AjaxLink<Void>("goLink") {
        @Override
        public void onClick(final AjaxRequestTarget target) {
            System.out.println(reportType+"go button clicked");
            final IResourceStream stream = renderItems();
            //generate report and create a new component using that.
            Component component = new AIAIframe("reportFrame", stream);
            component.setOutputMarkupId(true);
            this.addOrReplace(component);
            System.out.println("new framwe added reportframe");
        }
    });
    add(form);

Пожалуйста, найдите разметку.html ниже

<wicket:extend>
<div style = "margin-left:3%;">
    <form wicket:id = "form">
        <span>
            <h4>Report Erscheinung Auswahl</h4>

            <select wicket:id = "chooseType" style = "margin-left:5%;">
            <option>Kostenvoranschlag</option>
            <option>Aufträge</option>
            <option>Rechnungen</option>
        </select>
        </span>
        <span>
            <a href = "#" class = "downloadLink" wicket:id = "goLink">GO</a>
        </span>
    </form>
</div>
<br>
<style>
    a.downloadLink {
      width: 115px;
      height: 25px;
      background: #4E9CAF;
      padding: 6px;
      text-align: center;
      border-radius: 5px;
      color: white;
      font-weight: bold;
    }
    .aia-center {
       margin:0 auto;
       padding: 6px;
    }
</style>
<div class = "aia-center">
    <span>Download as: </span>
    <select wicket:id = "formatSelect">
    </select>
    <a href = "#" class = "downloadLink" wicket:id = "downloadLink">Download</a>
</div>
<span style = "height: 100%; width: 100%" wicket:id = "reportFrame"></span>

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 113
1

Ответы 1

Вам нужно вызвать target.add(component), если вы хотите, чтобы это component было повторно отображено с ответом Ajax.

Поскольку вы повторно создаете компонент с помощью wicket:id="reportFrame", вам необходимо убедиться, что изначально отображаемый компонент (до запроса Ajax) также имел .setOutputMarkupId(true), чтобы логика Ajax могла найти его в DOM браузера и заменить на новый.

Спасибо большое. Но я получаю эту ошибку, когда я пробовал это. ОШИБКА - PnWebExceptionHandler - org.apache.wicket.markup.MarkupNotFoundException: разметка не найдена для компонента: [AIAIframe [идентификатор компонента = reportFrame]] INFO | JVM 1 | 2019/03/26 09:03:00 | org.apache.wicket.markup.MarkupNotFoundException: разметка не найдена для компонента: [AIAIframe [идентификатор компонента = reportFrame]]

Shelly 26.03.2019 09:05

Я обновил калитку markup.html в вопросе. Не могли бы вы взглянуть.

Shelly 26.03.2019 09:08

Я добавил то, что вы сказали, удалив this.addOrReplace (компонент). Затем я получил это предупреждающее сообщение. Компонент «[AIAIframe [Component id = reportFrame]]» с markupid: «id407» не отображается, поскольку он уже удален со страницы.

Shelly 26.03.2019 09:23

У вас должны быть как addOrReplace(component) (добавляет компонент в дерево компонентов), так и target.add(component) (указывает Wicket отображать его в AjaxRequest). Проблема в том, что вы вызываете addOrReplace(component) на this, что в этом контексте относится к AjaxLink. Однако вы, вероятно, захотите вызвать его на своей странице, поскольку ваш график нет является дочерним элементом GO-Link, а скорее прямым дочерним элементом страницы, согласно вашему фрагменту html. Так что getPage().addOrReplace(component) должно работать в вашем конкретном случае.

Tekki 26.03.2019 10:57

Другие вопросы по теме