我正在使用MyFaces 1.2和Tomahawk一些额外的组件。对于这个特定的页面,我需要使用dataList(而不是dataTable),因为我对我的集合中的每个项目都需要显示多行(所以我无法使用dataTable)。
我尝试使用rowClasses,但这不起作用(我想因为我自己生成行)。我也尝试将行绑定到一个支持bean,但这似乎只发生了1次,而不是每个项目。
知道如何使用JSF最好地实现它吗?
答案 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类。