2011-10-10 15 views
11

Jakiś powód, dla którego taki obiekt jak Set<MyObject> objects = new HashSet<MyObject>(); nie powinien działać w JSF Dataatable? Działa z List.Wyświetlanie obiektów z kolekcji Ustaw w Datatable JSF nie działa

+2

Z pewnością dlatego, że elementy HashSet nie są uporządkowane. Każde wstawienie lub usunięcie w zestawie może spowodować zmianę kolejności jego elementów. –

+0

@JBNizet To powinno być odpowiedź. –

+0

Nie jestem ekspertem w JSF, a tym samym nie jestem pewien, że jest to powód (lub jedyny powód). Tak więc pozwolę innym odpowiedzieć na bardziej precyzyjną odpowiedź. –

Odpowiedz

23

Co do tego, dlaczego ogólnie nie jest obsługiwany standard Set, dzieje się tak dlatego, że ta struktura danych nigdy nie jest przeznaczona do przechowywania zbioru obiektów, który jest uporządkowany według indeksu. Model List robi to i ta struktura danych jest najbardziej sensowną strukturą danych, która reprezentuje wartość składnika UIData. Interfejs DataModel, który reprezentuje zapakowaną wartość komponentów UIData i przechowuje indeksy wierszy oraz zapamiętuje bieżący wiersz dla iteracji renderowania i przetwarzania formularza wysyłania przy odświeżeniu, obsługuje z klas kolekcji Java tylko interfejs List o smaku ListDataModel.

Po proces decyzyjny długo (szczególnie popychany przez Hibernate/JPA społeczności, którzy na ogół używa Set dla relacji nm), zespół JSF Spec ma na nadchodzący JSF 2.2 wreszcie zdecydowały się na wsparcie DataModel interfejsu interfejs Collection zamiast sam List, za pomocą nowej implementacji CollectionDataModel. Obsługuje również zestawy. Zobacz także JSF spec issue 479. Powinieneś pamiętać tylko o używaniu LinkedHashSet zamiast HashSet, oczywiście jeśli twoim zamiarem jest posiadanie edytowalnej tabeli danych. A LinkedHashSet utrzymuje porządek elementów.