我在包含元素{a,b,c,d,e,g,h,y,t}的struts2类中有一个列表。 我想显示该列表以表的格式是这样的:如何以表格格式在jsp页面上显示列表
A B C
d例如
ħý吨
这意味着每行3个元件。 我使用“s:iterator”和“s:property”标签。
我在包含元素{a,b,c,d,e,g,h,y,t}的struts2类中有一个列表。 我想显示该列表以表的格式是这样的:如何以表格格式在jsp页面上显示列表
A B C
d例如
ħý吨
这意味着每行3个元件。 我使用“s:iterator”和“s:property”标签。
看起来很容易。
<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>
UPDATE
如果你不想使用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>
你喜欢子集...但是这可以通过检查迭代器索引并进行单个数字比较来处理。这大大减少了代码重复。你的例子也省略了最后的行和单元格。 – 2012-07-13 12:35:14
@DaveNewton hahaha ...是的,你说得对,但你不觉得'subset'更快吗? – Jaiwo99 2012-07-13 12:52:16
我怀疑三个子集会比单个数字比较快,但也许。更令人困惑的是,还有3倍的来源。 – 2012-07-13 12:58:04
我的方法是在JB的“在Java端做”和Jaiwo的“在视图中做”。
我希望有一个自定义标签,它可以获得列数,拆分列表,添加空元素(如果它不是列数的偶数倍),并将所有逻辑封装在一个很好的小包中。
对于只有视图层的方法,我会使用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-layer-only方法的问题在于,如果您希望能够从视图层设置列计数(合理的愿望),则需要将列计数设置为Java。 OGNL可以让我们调用任意方法,所以最终我可能会实现一个小工具,创建嵌套列表:
<s:iterator value="@[email protected](items, 3)">
...
但是我换是了一个自定义标签,因为(a)它的丑陋,和(b)它干扰主线JSP。与Rails中的partials类似,应该重构显示对象列表,其中包含:
<app:showItems items="..." columns="..." />
是这个功课吗?提供代码 – 2012-07-13 09:01:12
如果在JSP中很难做到这一点,那么可以在您的操作中使用Java来完成此操作,并将此新的'List'(每行包含1到3个值)传递给JSP。 –
2012-07-13 09:27:36
感谢alli得到了我的逻辑 – ankit 2012-07-13 09:27:40