Wicket:动态排列列表中的元素

时间:2016-01-31 18:57:56

标签: wicket

我有一个元素列表,在模板中定义为:

 <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;标记,除了该解决方案看起来很糟糕。

也许应该有一种方法以编程方式创建两个列表,然后迭代它们来渲染?

1 个答案:

答案 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>