从Wicket ListView中删除显示中最后一个元素的一部分

Anu*_*Anu 3 wicket

我是Wicket的新手.我必须实现一个ListView包含div所有列表项之间的内容.我能够做到,但它也显示了div最后一个元素.我不希望最后div出现.我怎么能摆脱它?这是我现有的代码:

    add(new ListView<ItemAdapter>("items", order.getItems()) {
        @Override protected void populateItem(ListItem<ItemAdapter> item)
        ItemAdapter itemList= (ItemAdapter)item.getModelObject();
        item.add(new Label("itemName",  itemList.getItemName()));
        item.add(new Label("qty",itemList.getQuantity().toString()));
        item.add(new Label("div","<br/><div class='itemList'></div>"))
    }
});
Run Code Online (Sandbox Code Playgroud)

Xav*_*ica 5

setVisible()根据项目是否是列表中的最后一项,使用ListItem.getIndex()和大小来设置组件的可见性ListView.getList().如果调用该组件setVisible(false),则它将不会包含在渲染输出中.

另外,我建议不要使用a Label作为分隔符.将其添加为a WebMarkupContainer,并在标记中定义其内容(即它所属的位置).

使用wicket:container的HTML,或使用<div>和设置renderBodyOnly(true),以便只的内容WebMarkupContainer输出.

例如:

ItemAdapter itemList= (ItemAdapter)item.getModelObject();
item.add(new Label("itemName",  itemList.getItemName()));
item.add(new Label("qty",itemList.getQuantity().toString()));
WebMarkupContainer separator = new WebMarkupContainer("separator");
boolean isLast = item.getIndex() +1 == getList().size();
separator.setVisible(!isLast);
item.add(separator);
Run Code Online (Sandbox Code Playgroud)

使用HTML:

<div wicket:id="list">
    ...
    <wicket:container wicket:id="separator">
        <br/>
        <div class='itemList'></div>
    </wicket:container>
</div>
Run Code Online (Sandbox Code Playgroud)

作为旁注,如果你仍想使用a Label作为分隔符,你应该使用separator.setEscapeModelStrings(false);它来告诉Wicket不要逃避其Model中定义的标记.

ListView例如,如果使用a 进行分页,PageableListView则应使用ListView.getViewSize()`来确定视图中显示的实际项目数.