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 経由で を更新することはできません。

<div wicket:id="listViewContainer">代わりに法線を使用してください。

于 2013-08-25T19:00:58.917 に答える