2009-12-30 29 views

Respuesta

11

dado que está utilizando richfaces, puede hacerlo con su etiqueta de iteración (<a4j:repeat>), que es un poco más apropiado que el uso de <c:forEach>, y que es como una extensión de <ui:repeat>

<table> 
    <a4j:repeat value="#{bean.list}" var="item" rowKeyVar="idx"> 
     <tr> 
      <td><h:outputText value="#{idx + 1}" /></td> 
      <td><h:outputText value="#{item.someProperty}" /></td> 
      <td><h:outputText value="#{item.otherProperty}" /></td> 
     </tr> 
    </a4j:repeat> 
</table> 
6

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> 
+0

Voy a probar el segundo enfoque. c: paraCada. Gracias BalusC – crazyTechie

+2

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

0

No hay contador para cada fila en ui: repita. Como BalusC dijo que puedes ir por h: datatable. Otra idea es indirectamente, puede agregar un método de índice adicional en bean para cada objeto en la lista en el servidor y obtenerlo en jsf y manipularlo.

19

A partir de Facelets 2.0, esto ahora es posible usando el varStatus.

<ui:repeat varStatus="status" var="user" value="#{collection}"> 
    #{status.index} 
</ui:repeat> 
0

Una mala (o buena idea) es el uso de JavaScript hacer ese truco.

<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> 
Cuestiones relacionadas