2009-12-30 35 views
8

Tôi có bảng HTML trong ứng dụng web JSF. Tôi đang tạo ra hàng động bằng cách sử dụng <ui:repeat>. Tôi muốn có một bộ đếm cho mỗi hàng. Làm thế nào tôi có thể nhận được điều này? Bất kỳ giúp đỡ?truy cập hàng cho hàng bảng html

Ssimilar để rowKeyVar trong khuôn mặt phong phú dataTable.

Trả lời

11

Vì bạn đang sử dụng richfaces, bạn có thể làm điều đó với thẻ của nó lặp đi lặp lại (<a4j:repeat>), mà là một chút thích hợp vì sử dụng <c:forEach>, và đó cũng giống như một phần mở rộng để <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

Bạn không thể làm điều đó một cách độc đáo với ui:repeat, nhưng bạn có thể làm như vậy với h:dataTable. Liên kết thành phần với thuộc tính UIData trong bean sao lưu. Nó có một phương pháp getRowIndex() mà thực hiện chính xác những gì bạn cần:

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

Ở đây tôi thêm 1-UIData#getRowIndex() vì nó là zero-based. Bạn có thể tìm thấy bài viết Using datatables hữu ích để tìm hiểu thêm về datatables.

Nếu bạn thực sự muốn kiểm soát nhiều hơn một chút so với cách bố trí bảng (đặc biệt là sử dụng colspans/rowspans, mà đang thiếu trong thực thẻ JSF h:dataTable), sau đó một sự thay thế là sử dụng JSTL c:forEach thẻ trong đó có một thuộc tính varStatus mà cho phép bạn xử lý trạng thái vòng lặp.

<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

Tôi sẽ thử phương pháp thứ hai. c: forEach. Cảm ơn BalusC – crazyTechie

+2

Những bất lợi lớn của 'c: forEach' là bạn không thể sử dụng các thành phần đầu vào trong bảng một cách dễ dàng. Với một 'h: dataTable' bạn có thể dễ dàng tạo ra một datatable có thể chỉnh sửa và JSF sẽ quản lý tất cả các dữ liệu thu thập và cập nhật đầy đủ chính nó. – BalusC

0

Không có bộ đếm cho mỗi hàng trong ui: lặp lại. Như BalusC cho biết bạn có thể đi cho h: datatable. Một ý tưởng khác là gián tiếp bạn có thể thêm một phương thức chỉ mục bổ sung trong bean cho mỗi đối tượng trong danh sách trong serverside và nhận được điều đó trong jsf và thao tác nó.

19

Tính đến Facelets 2.0, bây giờ có thể sử dụng varStatus.

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

A (ý tưởng hay tốt) xấu đang sử dụng Javascript làm trick mà.

<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> 
Các vấn đề liên quan