我在struts2类中有一个列表,其中包含元素{a,b,c,d,e,g,h,y,t}。 我想以表格格式显示此列表,如下所示:
a b c
d e g
h y t
表示每行三个元素。 我正在使用“s:iterator”和“s:property”标签。
答案 0 :(得分:0)
似乎很容易。
<table>
<tr>
<s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="0">
<s:iterator>
<td><s:property /></td>
</s:iterator>
</s:subset>
</tr>
<tr>
<s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="3">
<s:iterator>
<td><s:property /></td>
</s:iterator>
</s:subset>
</tr>
<tr>
<s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="6">
<s:iterator>
<td><s:property /></td>
</s:iterator>
</s:subset>
</tr>
</table>
<强>更新强>
如果您不想使用subset
,可以选择其他方式。
<table>
<s:iterator value="{1,2,3,4,5,6,7,8,9}" status="status">
<s:if test="%{#status.index == 0}"><tr><td><s:property /></td></s:if>
<s:elseif test="%{#status.index%3 == 0}">
</tr><tr><td><s:property /></td>
</s:elseif>
<s:else>
<td><s:property /></td>
</s:else>
</s:iterator>
</tr>
</table>
答案 1 :(得分:0)
我的方法是在JB的中间&#34;在Java方面做到这一点&#34;和Jaiwo&#34;在视图中做到了#34;
我倾向于使用自定义标记来获取列数,拆分列表,添加空元素(如果它不是列数的偶数倍),并将所有逻辑包装在一个漂亮的小包中。< / p>
对于仅限视图层的方法,我使用了Jaiwo代码中任何一种的变体。对于子集的想法,我将它们分解成一个有凝聚力的块,但仍然进行双重迭代 - IMO这更加清晰:
<s:set var="items" value="{1,2,3,4,5,6,7,8,9}" />
<s:subset var="list1" source="#items" start="0" count="3" />
<s:subset var="list2" source="#items" start="3" count="3" />
<s:subset var="list3" source="#items" start="6" count="3" />
<s:set var="nested" value="{#attr.list1, #attr.list2, #attr.list3}" />
<table>
<s:iterator value="#nested">
<tr>
<s:iterator>
<td><s:property /></td>
</s:iterator>
</tr>
</s:iterator>
</table>
当列表不是列数的偶数倍时,这就会崩溃;您不能(轻松地)将项目附加到子集(它不是列表,它是迭代器),并且在JSP中将项目添加到原始列表中是笨拙的。
仅Java层方法的问题在于,如果您希望能够从视图层设置列数(合理的需求),则需要将列数计算为Java。 OGNL允许我们调用任意方法,所以最终我可能实现了一个创建嵌套列表的小实用程序:
<s:iterator value="@utils@slice(items, 3)">
...
但我将 包装在自定义标签中,因为(a)它很难看,而且(b)它使主线JSP混乱。与Rails中的partials类似,应该重构对象列表的显示,留下:
<app:showItems items="..." columns="..." />