使用tomahawk dataList交替行颜色

时间:2011-08-19 13:25:58

标签: jsf

我正在使用MyFaces 1.2和Tomahawk一些额外的组件。对于这个特定的页面,我需要使用dataList(而不是dataTable),因为我对我的集合中的每个项目都需要显示多行(所以我无法使用dataTable)。

我尝试使用rowClasses,但这不起作用(我想因为我自己生成行)。我也尝试将行绑定到一个支持bean,但这似乎只发生了1次,而不是每个项目。

知道如何使用JSF最好地实现它吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,<t:dataList>没有类似于varStatus<c:forEach>的{​​{1}}概念。否则你可以做这样的事情:

<ui:repeat>

<table id="mytable">
    <c:forEach items="#{bean.items}" var="item" varStatus="loop">
        <tr>
            <td class="#{loop.index % 2 == 0 ? 'even' : 'odd'}">
                <h:outputText value="#{item}" />
            </td>
        </tr>
    </c:forEach>
</table>

如果#mytable tr.odd { background-color: #ddd; } #mytable tr.even { background-color: #eee; } 由于技术限制而不适合您,因为它是一个视图构建时标记,而不是渲染时标记,并且您使用的是Facelets而不是JSP,那么您应该可以使用<c:forEach>遵循类似的语法,唯一的区别是您需要使用<ui:repeat>属性而不是value

items

但是如果你没有使用Facelets(即使你以前的问题暗示你正在使用Facelets),那么你最好的选择是使用CSS3 <table id="mytable"> <ui:repeat value="#{bean.items}" var="item" varStatus="loop"> <tr> <td class="#{loop.index % 2 == 0 ? 'even' : 'odd'}"> <h:outputText value="#{item}" /> </td> </tr> </ui:repeat> </table> 伪选择器。

nth-child

但是如果目标受众使用的webbrowser不支持CSS3(IE8及更早版本),则需要在文档加载期间使用JavaScript / jQuery添加CSS类。