Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jsp页面上以表格格式显示列表_Jsp_Struts2 - Fatal编程技术网

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

如何在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"> <

我在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">
            <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>