我有一个元素列表,在模板中定义为:
<dl>
<wicket:enclosure>
<dt><wicket:message key="numberTitle" />:</dt>
<dd wicket:id="objectNumber">1</dd>
</wicket:enclosure>
...
<wicket:enclosure>
<dt><wicket:message key="nameTitle" />:</dt>
<dd wicket:id="objectName">2</dd>
</wicket:enclosure>
</dl>
我需要能够根据实际值将dl拆分为两个列表 - 一些文本,其他导致EmptyPanel或自定义元素,如果为空则隐藏自身。示例:
<dl>
<wicket:enclosure>
<dt><wicket:message key="numberTitle" />:</dt>
<dd wicket:id="objectNumber">1</dd>
</wicket:enclosure>
...
</dl>
<dl>
<wicket:enclosure>
<dt><wicket:message key="nameTitle" />:</dt>
<dd wicket:id="objectName">2</dd>
</wicket:enclosure>
</dl>
在相应的Java类中,我能够验证添加了什么值。我的想法是在每个列表元素之间添加处理程序,比如
<wicket:container wicket:id="split_1">
...
<wicket:container wicket:id="split_2">
并创建一个元素,它将呈现</dl><dl>
,然后将其放在需要此分割的位置。但是wicket会对此进行验证,并且不允许我将其视为无效&#39;标记,除了该解决方案看起来很糟糕。
也许应该有一种方法以编程方式创建两个列表,然后迭代它们来渲染?
答案 0 :(得分:0)
我同意最好将两个列表保留在标记中,并将元素添加到适当的列表中。制作一个小面板,其中包含您在<wicket:enclosure>
中的重复标记。然后java看起来像这样:
RepeatingView list1 = new RepeatingView("list1");
add(list1);
RepeatingView list2 = new RepeatingView("list2");
add(list2);
for (Object a : listOfItems) {
if (shouldGoInFirstList(a))
list1.add(new MyPanel(list1.newChildId(), a);
else
list2.add(new MyPanel(list2.newChildId(), a);
}
而HTML只是:
<dl>
<wicket:container wicket:id="list1"></wicket:container>
</dl>
<dl>
<wicket:container wicket:id="list2"></wicket:container>
</dl>