Удалить часть последнего элемента из отображения из Wicket ListView - PullRequest
3 голосов
/ 07 ноября 2011

Я новичок в калитке. Я должен реализовать 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>"))
    }
});

1 Ответ

5 голосов
/ 07 ноября 2011

Установите видимость компонента с помощью setVisible() в соответствии с тем, является ли элемент последним в списке, с использованием ListItem.getIndex() и размером ListView.getList() . Если компонент называется setVisible(false), он вообще не будет включен в визуализированный вывод.

Кроме того, я бы рекомендовал не использовать Label для разделителя. Добавьте его как 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);

С 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() `, чтобы определить реальное количество отображаемых элементов в представлении.

...