2011-10-10 50 views
11

爲什麼諸如Set<MyObject> objects = new HashSet<MyObject>();不應該在JSF Datatable中工作的任何原因?它適用於List。在Datatable JSF中顯示Set集合中的對象不起作用

+2

當然是因爲HashSet的元素沒有排序。集合中的任何插入或刪除都可能導致其元素的順序發生更改。 –

+0

@JBNizet這應該是一個答案。 –

+0

我不是JSF的專家,因此我不確定這是否是原因(或唯一原因)。所以我會讓別人回答更準確的答案。 –

回答

23

至於爲什麼Set一般不被支持,這是因爲這個數據結構永遠不會支持由索引排序的對象集合。 List這樣做,並且此數據結構是表示UIData組件的值的最明智的數據結構。 DataModel接口表示UIData組件的包裝值,並保存行索引並記住當前行以渲染時的迭代以及回發時的表單提交處理,支持來自Java集合類的List風格爲ListDataModel的接口。

經過漫長的決策過程(尤其是由Hibernate/JPA社區推誰普遍採用Set爲納米關係),在JSF規範團隊已經爲即將到來JSF 2.2終於決定讓DataModel接口支持Collection接口,而不是單獨List,在新的CollectionDataModel實施的幫助下。這也支持集合。另見JSF spec issue 479。你應該只記住使用LinkedHashSet而不是HashSet,當然如果你的意圖是有一個可編輯的數據表。 A LinkedHashSet保持元素的排序。