我有一个 ListView,它显示一些面板。因为这个 ListView 可能很长,所以我想让它可折叠。
为此,我添加了一个 WebMarkupContainer:
final WebMarkupContainer wmc = new WebMarkupContainer("listViewContainer");
wmc.setOutputMarkupId(true);
this.add(wmc);
这就是 ListView 的创建方式:
final ListView<String> examListViewSignedUp = new ListView<String>("examLVsu", signedUpExams) {
private static final long serialVersionUID = -2828116887162006658L;
protected void populateItem(ListItem<String> item) {
String examId = item.getModelObject();
item.add(new ExamPanel("exam1", examId));
}
};
wmc.add(examListViewSignedUp);
最后,我添加 AjaxLink。也就是说,事实上,如果列表已展开,则为“[-]”,否则为“[+]”。我通过 .setVisible(...)
设置 ListView 的可见性来“展开”/“折叠”ListView。
final Model<String> sulink = new Model<String>(esuclt);
wmc.add(new AjaxLink("overviewCollapseLinkSignedUp") {
private static final long serialVersionUID = 8603181768552484977L;
@Override
public void onClick(AjaxRequestTarget target) {
if (examListViewSignedUp.isVisible()) {
examListViewSignedUp.setVisible(false);
sulink.setObject("[+]");
} else {
examListViewSignedUp.setVisible(true);
sulink.setObject("[-]");
}
target.add(wmc);
}
}.add(new Label("oclt1", sulink)));
标记:
<wicket:container wicket:id="listViewContainer">
<h1 class="ocl">
<a wicket:id="overviewCollapseLinkSignedUp" href="#"><span wicket:id="oclt1">[?]</span></a>
<wicket:message key="examsHeadingInOverviewSignedUp">Exams - Signed Up</wicket:message>
</h1>
<span wicket:id="examLVsu"> <span wicket:id="exam1"></span></span>
</wicket:container>
我现在的问题是单击链接时 MarkupContainer 没有刷新。什么也没发生,但是当我重新加载页面时,一切看起来都如预期。我搜索了类似的问题,但找不到我的错误。
最佳答案
您无法更新<wicket:container>
是通过 Ajax 进行的,因为它们不存在于最终标记中。
使用正常的<div wicket:id="listViewContainer">
相反。
关于java - 通过 ajax/collapsible ListView 刷新 wicket 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429644/