Sie können es nicht schön mit der ui:repeat
tun, aber Sie können dies mit der h:dataTable
tun. Binden Sie die Komponente an eine UIData
-Eigenschaft in der Backing-Bean. Es hat eine getRowIndex()
Methode, die genau das tut, was Sie brauchen:
<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>
Hier bin ich das Hinzufügen 1
-UIData#getRowIndex()
, weil es null basiert. Sie können den Using datatables Artikel nützlich finden, um mehr über Datenquellen zu erfahren.
Wenn Sie tatsächlich ein bisschen mehr Kontrolle über die Tabellen-Layout (insbesondere unter Verwendung von colspans/über mehr Zeilen, die in dem realen JSF h:dataTable
Tag fehlen) mögen, dann ist eine Alternative, den JSTL c:forEach
Tag zu verwenden, die ein varStatus
Attribut hat die gibt Ihnen einen Griff zum Schleifenstatus.
<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>
Ich werde den zweiten Ansatz versuchen. c: forEach. Danke BalusC – crazyTechie
Der Hauptnachteil von 'c: forEach' ist, dass Sie Input-Komponenten in der Tabelle nicht einfach verwenden können. Mit einer 'h: dataTable' können Sie einfach eine editierbare Datentabelle erstellen und JSF verwaltet alle Daten, die vollständig gesammelt und aktualisiert werden. – BalusC