我是新来的。我必须实现一个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>"))
}
});
使用setVisible()
设置组件的可见性,根据该项目是否是列表中的最后一个,使用ListItem.getIndex()
和ListView.getList()
的大小。如果该组件被称为setVisible(false)
,则它将完全不包含在渲染输出中。
另外,我建议不要使用Label
作为分隔符。将其添加为WebMarkupContainer
,并在标记中定义其内容(这是它所属的位置)。
在HTML中使用wicket:container
,或者使用<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);
与HTML:
<div wicket:id="list">
...
<wicket:container wicket:id="separator">
<br/>
<div class='itemList'></div>
</wicket:container>
</div>
作为旁注,如果您仍然希望使用Label
作为分隔符,则应该使用separator.setEscapeModelStrings(false);
,以便告诉Wicket不要转义其模型中定义的标记。
如果ListView
被分页,例如,使用PageableListView
,您应该使用ListView.getViewSize()
'来确定视图中显示项目的实际数量。