0

我有一个显示一些面板的 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。也就是说,事实上,如果列表被扩展,则为“[-]”,否则为“[+]”。我通过设置它的可见性来“展开”/“折叠”ListView .setVisible(...)

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 。什么都没有发生,但是当我重新加载页面时,一切看起来都如预期的那样。我搜索了类似的问题,但我无法找到我的错误。

4

1 回答 1

1

<wicket:container>不能通过 Ajax 更新 's,因为它们不存在于最终标记中。

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

于 2013-08-25T19:00:58.917 回答