如何以表格格式在jsp页面上显示列表

时间:2012-07-13 08:50:15

标签: 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”标签。

2 个答案:

答案 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="..." />