如何在jsp页面上以表格格式显示列表
我在struts2类中有一个列表,它包含元素{a,b,c,d,e,g,h,y,t}。 我希望以如下表格格式显示此列表: a、b、c d e g h y t 这意味着每行有三个元素。 我使用的是“s:iterator”和“s:property”标记。看起来很简单如何在jsp页面上以表格格式显示列表,jsp,struts2,Jsp,Struts2,我在struts2类中有一个列表,它包含元素{a,b,c,d,e,g,h,y,t}。 我希望以如下表格格式显示此列表: a、b、c d e g h y t 这意味着每行有三个元素。 我使用的是“s:iterator”和“s:property”标记。看起来很简单 <table> <tr> <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="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>
我的方法是在JB的“java的一边做”和Jaiwo的“在视图中做”。p> 我喜欢一个自定义标记,它接受列计数,拆分列表,如果不是列计数的偶数倍,则添加空元素,并将所有逻辑封装在一个漂亮的小捆绑包中 对于仅视图层的方法,我将使用Jaiwo的任一代码的变体。对于子集的想法,我会将它们分解成一个有凝聚力的块,但仍然要进行双重迭代——在我看来,这更清楚:
当列表不是列计数的偶数倍时,这会崩溃;您不能(轻松地)将项附加到子集(它不是列表,而是迭代器),在JSP中向原始列表添加项是很笨拙的
纯Java层方法的问题在于,如果您希望能够从视图层设置列数(这是一个合理的愿望),那么需要将列数设置为Java。OGNL允许我们调用任意方法,因此最终我可能会实现一个创建嵌套列表的小实用程序:
...
但我会将其包装在一个自定义标记中,因为(a)它很难看,(b)它会使主线JSP混乱。与Rails中的partials类似,对象列表的显示应该被重构,留下:
这是家庭作业吗?提供代码如果在JSP中很难做到这一点,您可以在您的操作中使用Java,并将这个新的列表
(每行包含1到3个值)传递给JSP。谢谢alli获得了我的逻辑you do like子集。。。但这一切都可以通过检查迭代器索引和进行单个数字比较来处理。这大大减少了代码重复。您的示例还省略了结尾行和单元格。@DaveNewton hahaha。。。是的,你是对的,但是你不认为子集
更快吗?我怀疑三个子集会比一个数字比较快,但也许。更令人困惑的是,它是源代码的3倍。@DaveNewton嗨,这是你的解决方案。或者你有更好的。。我只是想帮你。我知道你想帮你——我也是。我开始的时候有一个较长的评论,但后来我被冲昏头脑,把它都变成了一个答案。
<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>