我發現RepeatingView對於這種事情非常靈活,你不應該需要三個單獨的頁面。它只是期望一個組件被添加到中繼器,而不是什麼類型的組件。只要保持Wicket ID一致,您甚至可以將自帶標記的組件(例如Panel/Fragment)混合在一起。
我也不鼓勵你使用面板列表。列表中包含您的數據,然後根據某個標誌添加相應的視圖容器,這隻會對編程有好處。
所以,像這樣的標記:
<div wicket:id="repeater">
<div wicket:id="listItem" />
</div>
作品的東西,如:
RepeatingView rv = new RepeatingView("repeater");
for (DataObject o : dataList) {
// You can probably add to the rv directly, but this is the common usage
WebMarkupContainer c = new WebMarkupContainer(rv.newChildId());
rv.add(c);
if (shortVersion)
c.add(new ShortPanel("listItem", new Model<DataObject>(o)));
else
c.add(new LongPanel("listItem", new Model<DataObject>(o)));
}
而不是到你的頁面提供面板的列表中,您從數據庫提供數據的同一列表然後根據當前視圖添加不同的面板。
最後,根據每個視圖類型,您有一個頁面(帶有標記視圖類型)和不同的面板(或片段)。
重要:中繼器內的wicket:id必須命名爲「listItem」,否則不起作用 – bebbo