0

我在 struts2 类中有一个列表,其中包含元素 {a,b,c,d,e,g,h,y,t}。我想以表格格式显示此列表,如下所示:

美国广播公司

海特

这意味着每行三个元素。我正在使用“s:iterator”和“s:property”标签。

4

2 回答 2

0

我的方法是在 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 层方法的问题在于,如果您希望能够从视图层设置列数(合理的愿望),则需要将列数设置为 Java。OGNL 允许我们调用任意方法,所以最终我可能会实现一个创建嵌套列表的小实用程序:

<s:iterator value="@utils@slice(items, 3)">
  ...

但我会将包装在一个自定义标记中,因为 (a) 它很丑,并且 (b) 它会使主线 JSP 混乱。与 Rails 中的 partials 类似,对象列表的显示应该被重构出来,留下:

<app:showItems items="..." columns="..." />
于 2012-07-13T16:48:12.677 回答
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>
于 2012-07-13T10:16:54.350 回答