2011-11-07 65 views
3

我是Wicket的新手。我必須實現一個ListView,其中包含所有列表項目之間的div。我能夠做到這一點,但它也顯示了div之後的最後一個元素。我不希望最後的div出現。我怎樣才能擺脫它?這是我的現有代碼:從Wicket ListView中刪除部分顯示中的最後一個元素

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>")) 
    } 
}); 

回答

5

設置組件與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()`確定視圖中顯示項目的實際數量。

+1

@Anu:你應該接受答案,否則人們會覺得像回答你。 – bert

相關問題