通过ajax / collapsible ListView刷新wicket容器

时间:2013-08-25 13:48:26

标签: java ajax listview refresh wicket

我有一个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>&nbsp;
            <wicket:message key="examsHeadingInOverviewSignedUp">Exams - Signed Up</wicket:message>
        </h1>
        <span wicket:id="examLVsu"> <span wicket:id="exam1"></span></span>
</wicket:container>

我现在的问题是单击链接时不会刷新MarkupContainer。什么都没发生,但是当我重新加载页面时,一切看起来都像预期的那样。我搜索了类似的问题,但我无法找到我的错误。

1 个答案:

答案 0 :(得分:1)

您无法通过Ajax更新<wicket:container>,因为它们不在最终标记中。

改为使用普通<div wicket:id="listViewContainer">