Отображение объектов из коллекции Set в Datatable JSF не работает

#java #jsf #jakarta-ee

#java #jsf #джакарта-ee

Вопрос:

Есть ли причина, по которой a, например, Set<MyObject> objects = new HashSet<MyObject>(); не должен работать в JSF Datatable? Он работает со списком.

Комментарии:

1. Конечно, потому что элементы HashSet не упорядочены. Любая вставка или удаление в наборе может привести к изменению порядка его элементов.

2. @JBNizet Это должно быть ответом.

3. Я не эксперт в JSF и поэтому не уверен, что это причина (или единственная причина). Поэтому я позволю другим ответить на более точный ответ.

Ответ №1:

Что касается того, почему a Set вообще не поддерживается, это связано с тем, что эта структура данных никогда не предназначена для хранения коллекции объектов, упорядоченных по индексу. Это List делает, и эта структура данных является наиболее разумной структурой данных для представления значения UIData компонента. DataModel Интерфейс, который представляет обернутое значение UIData компонентов и содержит индексы строк и запоминает текущую строку для итерации при рендеринге и обработке отправки формы при обратной передаче, поддерживает из классов коллекции Java только List интерфейс в стиле ListDataModel .

После длительного процесса принятия решений (особенно под давлением сообщества Hibernate / JPA, которое обычно использует Set for n-m отношений), команда разработчиков спецификации JSF для предстоящего JSF 2.2 наконец решила позволить DataModel интерфейсу поддерживать Collection интерфейс, а не только интерфейс List , с помощью новой CollectionDataModel реализации. Это также поддерживает наборы. См. Также выпуск спецификации JSF 479. Вы должны иметь в виду только использование LinkedHashSet вместо HashSet , конечно, если вы намерены иметь редактируемую таблицу данных. A LinkedHashSet поддерживает порядок элементов.