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



我是新来的。我必须实现一个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() '来确定视图中显示项目的实际数量。

最新更新