我在JSF Web应用程序中有HTML表。我正在使用<ui:repeat>
动态生成行。我想要每行一个计数器。我怎么能得到这个?有什么帮助吗?
与富面数据表中的rowKeyVar类似。
答案 0 :(得分:20)
从Facelets 2.0开始,现在可以使用varStatus
。
<ui:repeat varStatus="status" var="user" value="#{collection}">
#{status.index}
</ui:repeat>
答案 1 :(得分:11)
由于您使用的是richfaces,您可以使用其迭代标记(<a4j:repeat>
)来完成,这比使用<c:forEach>
更合适,这就像{{1}的扩展}
<ui:repeat>
答案 2 :(得分:7)
你不能很好地使用ui:repeat
,但你可以使用h:dataTable
。将组件绑定到辅助bean中的UIData
属性。它有一个getRowIndex()
方法,可以完全满足您的需求:
<h:dataTable binding="#{bean.table}" value="#{bean.list}" var="item">
<h:column><h:outputText value="#{bean.table.rowIndex + 1}" /></h:column>
<h:column><h:outputText value="#{item.someProperty}" /></h:column>
<h:column><h:outputText value="#{item.otherProperty}" /></h:column>
</h:dataTable>
此处我将1
添加到UIData#getRowIndex()
,因为它是从零开始的。您可能会发现Using datatables文章对了解有关数据表的更多信息非常有用。
如果你真的想要更多地控制表格布局(特别是使用真正的JSF h:dataTable
标签中缺少的colspans / rowspans),那么另一种方法是使用JSTL c:forEach
具有varStatus
属性的标记,可以处理循环状态。
<table>
<c:forEach items="#{bean.list}" var="item" varStatus="loop">
<tr>
<td><h:outputText value="#{loop.index + 1}" /></td>
<td><h:outputText value="#{item.someProperty}" /></td>
<td><h:outputText value="#{item.otherProperty}" /></td>
</tr>
</c:forEach>
</table>
答案 3 :(得分:0)
ui中的每一行都没有计数器:重复。正如BalusC所说,你可以选择h:datatable。另一个想法是间接地你可以在服务器端的列表中为每个对象添加一个额外的索引方法,并在jsf中获取并操纵它。
答案 4 :(得分:0)
糟糕(或好主意)正在使用 JavaScript 来执行此操作。
<script>
var numberOfIndex = 0;
</script>
<ui:repeat value="#{modelBean.listUser}" var="item">
<tr>
<td><script>numberOfIndex -=-1;document.write(numberOfIndex);</script></td>
<td>${item.id}</td>
<td>${item.name}</td>
</tr>
</ui:repeat>