我有一个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。
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。什么都没发生,但是当我重新加载页面时,一切看起来都像预期的那样。我搜索了类似的问题,但我无法找到我的错误。
答案 0 :(得分:1)
您无法通过Ajax更新<wicket:container>
,因为它们不在最终标记中。
改为使用普通<div wicket:id="listViewContainer">
。