Здесь я использую компоненты калитки. Мое мнение, как показано ниже.
Мне нужно перегенерировать отчет и перезагрузить рамку отчета нажатием кнопки (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>
Вам нужно вызвать target.add(component)
, если вы хотите, чтобы это component
было повторно отображено с ответом Ajax.
Поскольку вы повторно создаете компонент с помощью wicket:id="reportFrame", вам необходимо убедиться, что изначально отображаемый компонент (до запроса Ajax) также имел .setOutputMarkupId(true)
, чтобы логика Ajax могла найти его в DOM браузера и заменить на новый.
Я обновил калитку markup.html в вопросе. Не могли бы вы взглянуть.
Я добавил то, что вы сказали, удалив this.addOrReplace (компонент). Затем я получил это предупреждающее сообщение. Компонент «[AIAIframe [Component id = reportFrame]]» с markupid: «id407» не отображается, поскольку он уже удален со страницы.
У вас должны быть как addOrReplace(component)
(добавляет компонент в дерево компонентов), так и target.add(component)
(указывает Wicket отображать его в AjaxRequest). Проблема в том, что вы вызываете addOrReplace(component)
на this
, что в этом контексте относится к AjaxLink. Однако вы, вероятно, захотите вызвать его на своей странице, поскольку ваш график нет является дочерним элементом GO-Link, а скорее прямым дочерним элементом страницы, согласно вашему фрагменту html. Так что getPage().addOrReplace(component)
должно работать в вашем конкретном случае.
Спасибо большое. Но я получаю эту ошибку, когда я пробовал это. ОШИБКА - PnWebExceptionHandler - org.apache.wicket.markup.MarkupNotFoundException: разметка не найдена для компонента: [AIAIframe [идентификатор компонента = reportFrame]] INFO | JVM 1 | 2019/03/26 09:03:00 | org.apache.wicket.markup.MarkupNotFoundException: разметка не найдена для компонента: [AIAIframe [идентификатор компонента = reportFrame]]