No puede hacerlo bien con el ui:repeat
, pero puede hacerlo con el h:dataTable
. Enlace el componente a una propiedad UIData
en el bean de respaldo. Tiene un método getRowIndex()
que hace exactamente lo que necesita:
<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>
Aquí estoy añadiendo 1
-UIData#getRowIndex()
porque es cero basada en. Puede encontrar el artículo Using datatables útil para aprender más acerca de las tablas de datos.
Si realmente quieres un poco más control sobre el diseño de la mesa (en especial el uso de colspans/rowspans, que carecen de la verdadera etiqueta JSF h:dataTable
), a continuación, una alternativa es utilizar el c:forEach
etiqueta JSTL que tiene un atributo varStatus
cuales le da una idea del estado del bucle.
<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>
Voy a probar el segundo enfoque. c: paraCada. Gracias BalusC – crazyTechie
La principal desventaja de 'c: forEach' es que no se pueden usar componentes de entrada en la tabla fácilmente. Con 'h: dataTable' puede crear fácilmente una tabla de datos editable y JSF administrará todos los datos que se recopilan y actualizan completamente. – BalusC