从一个迭代器到另一个迭代器的正确(线色)转换

时间:2014-03-17 13:03:51

标签: css css3 jsp struts2

我正在使用两个要在JSP文件中显示的列表。我根据它们(迭代器的)状态是偶数还是奇数来对列表的行进行着色。问题是我首先有一个正确显示颜色的迭代器,然后我有另一个迭代器,它应该以第一个迭代器结束的相反颜色开始。现在它取决于第一个的状态。

说第一个有两行  奇怪的  2.甚至

第二个迭代器以: 奇怪的 2.甚至

这很好。但是如果第一个列表有三个对象,那么它将如下所示: (第一) 奇怪的 甚至 奇怪的 (第二) 奇怪的 2.甚至

连续有两个'奇数',这意味着这些线将具有相同的颜色。

我希望在第二个迭代器上以偶数或奇数开始,具体取决于第一个结果。有没有聪明的方法来做到这一点?

修改

<s:iterator var="men" value="men" status="rowstatus">
<tr class="<s:if test="#rowstatus.odd == true ">odd</s:if><s:else>even</s:else>">
<td><property value="name"/></td>
<td><property value="age"/></td>
<td><property value="length"/></td>
</tr>
</s:iterator>

<s:iterator var="women" value="women" status="rowstatus">
<tr class="<s:if test="#rowstatus.odd == true ">odd</s:if><s:else>even</s:else>">
<td><property value="name"/></td>
<td><property value="age"/></td>
<td><property value="length"/></td>
</tr>
</s:iterator>

2 个答案:

答案 0 :(得分:4)

实际上,您可以(并且应该)仅使用CSS执行此操作,而不应用特定的类。

具有以下简化的JSP代码:

<table id="myTable">

    <s:iterator value="men">
        <tr>
            <td><property value="name"/></td>
            <td><property value="age"/></td>
            <td><property value="length"/></td>
        </tr>
    </s:iterator>

    <s:iterator value="women">
        <tr>
            <td><property value="name"/></td>
            <td><property value="age"/></td>
            <td><property value="length"/></td>
        </tr>
    </s:iterator>

</table>

您可以应用nth-child的简单奇数/偶数规则(在CSS文件中,或在页面<head>部分的样式块中):

<style>
    table#myTable tr:nth-child(odd) {
        background-color : white;
    }
    table#myTable tr:nth-child(even) {
        background-color : silver;
    }
</style>

查看 Running example

答案 1 :(得分:0)

我没有看到在视图层上做这项工作的任何理由,特别是因为没有设置额外的变量来保持迭代器中的状态,所以没有聪明的方法。

组合服务器端的列表,特别是因为每行的内容没有功能差异。在视图层中完成两次完全相同的工作是浪费和混乱。

不相关,但== true多余且冗长。