2010-10-25 22 views
29

Hỗ trợ thẻ <ui:repeat /> có lặp lại trên java.util.Set không? Tôi đã thử lặp qua các đối tượng thực thể miền JPA của tôi chứa trong một Set, nhưng nhận được lỗi. Có cái gì tôi đang mất tích? Có một lá cờ bổ sung cần phải có mặt hoặc một cái gì đó?JSF - <ui:repeat /> qua java.util.Set?

Trả lời

36

Không, ui:repeat không hỗ trợ Set, cũng không h:dataTable.

Bạn nên trả lại Danh sách từ Tập hợp và sử dụng danh sách đó thay thế.

public List<T> getListFromSet(Set<T> set) { 
    return new ArrayList<T>(set); 
} 

Bạn nên tránh sử dụng c:forEach; here is an article on why.

+0

Vì getters trong JSF được gọi là [nhiều lần] (https://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multiple-times), điều này có thể một giải pháp đắt tiền. –

1

Cân nhắc sử dụng c:forEach để thay thế. Có vẻ như ui:repeat không hỗ trợ các bộ (nghĩa là yêu cầu một số loại thuộc tính đặt hàng).

Nếu không, bạn có thể tạo thẻ riêng của bạn như được mô tả trong: http://techblog.bozho.net/?p=28

+6

Đừng ** KHÔNG ** xem xét sử dụng 'c: forEach': http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets –

+1

Nó hoàn toàn phụ thuộc vào những gì thiết lập là bạn đang iterating hơn và nếu nó biên dịch thời gian hay không. Vì vậy, nếu đó là trường hợp thì bạn CÓ THỂ sử dụng 'c: forEach'. – AdamH

+0

Có nếu bạn biết bạn đang làm gì, bạn có thể sử dụng 'c: forEach', nhưng tôi đọc bài viết của bạn vì bạn nên xem xét sử dụng c: forEach', và đây không phải là trường hợp. Sử dụng 'ui: repeat' tốt hơn để tránh các vấn đề –

69

Cách dễ nhất để hoàn thành giao dịch tại trang mà không sửa đổi lớp học là chuyển đổi set thành array như thế này.

<ui:repeat value="#{myBean.mySet.toArray()}" var="_myvar"> 
Các vấn đề liên quan