2011-10-10 26 views
11

Bất kỳ lý do nào tại sao chẳng hạn như Set<MyObject> objects = new HashSet<MyObject>(); không hoạt động trong JSF có thể định cấu hình? Nó hoạt động với Danh sách.Hiển thị các đối tượng từ tập hợp Tập hợp trong JSF có thể định dạng không hoạt động

+2

Chắc chắn vì các phần tử của HashSet không được đặt hàng. Bất kỳ chèn hoặc loại bỏ trong tập hợp có thể gây ra thứ tự của các yếu tố của nó để thay đổi. –

+0

@JBNizet Đây phải là câu trả lời. –

+0

Tôi không phải là một chuyên gia trong JSF, và do đó không chắc chắn rằng đây là lý do (hoặc lý do duy nhất). Vì vậy, tôi sẽ để người khác trả lời một câu trả lời chính xác hơn. –

Trả lời

23

Là tại sao một Set nói chung không được hỗ trợ, điều này là do cấu trúc dữ liệu này không bao giờ intented để giữ một bộ sưu tập của các đối tượng đó là ra lệnh bằng một chỉ số. Các List hiện điều đó và cấu trúc dữ liệu này là cấu trúc dữ liệu hợp lý nhất để đại diện cho giá trị của một thành phần UIData. Giao diện DataModel, đại diện cho giá trị được bao bọc của các thành phần UIData và giữ các chỉ mục hàng và ghi nhớ hàng hiện tại để lặp lại khi kết xuất và gửi biểu mẫu trên postback, hỗ trợ từ các lớp bộ sưu tập Java chỉ giao diện List với hương vị ListDataModel.

cuối cùng Sau một quá trình ra quyết dài (đặc biệt là đẩy bởi Hibernate/cộng đồng JPA người thường sử dụng Set cho mối quan hệ nm), đội JSF đặc tả có cho JSF sắp tới 2.2 quyết định để hỗ trợ giao diện DataModel giao diện Collection thay vì một mình List, với sự trợ giúp của triển khai CollectionDataModel mới. Điều này hỗ trợ thiết lập là tốt. Xem thêm JSF spec issue 479. Bạn chỉ nên nhớ sử dụng LinkedHashSet thay vì HashSet, chắc chắn nếu bạn có ý định có bảng dữ liệu có thể chỉnh sửa. A LinkedHashSet duy trì thứ tự của các phần tử.

Các vấn đề liên quan