Любая причина, по которой такой, как Set<MyObject> objects = new HashSet<MyObject>();
, не должен работать в JSF Datatable? Он работает со списком.
Отображение объектов из коллекции Set в Datatable JSF не работает
Ответ 1
Что касается того, почему Set
вообще не поддерживается, это связано с тем, что эта структура данных никогда не предназначена для хранения коллекции объектов, которая упорядочен по индексу. List
делает это, и эта структура данных является наиболее разумной структурой данных для представления значения UIData
. Интерфейс DataModel
, который представляет собой завернутое значение компонентов UIData
и содержит индексы строк и запоминает текущую строку для итерации при обработке рендеринга и формы отправки на обратной стороне, поддерживает из классов коллекции Java только List
интерфейс в аромате ListDataModel
.
После долгого процесса принятия решения (особенно для сообщества Hibernate/JPA, которое обычно использует Set
для отношений nm), команда разработчиков JSF имеет для предстоящей JSF 2.2, наконец, решил, что DataModel
интерфейс поддерживает Collection
интерфейс, а не только List
, с помощью новой реализации CollectionDataModel
. Это также поддерживает множества. См. Также спецификация JSF 479. Вы должны иметь в виду использовать LinkedHashSet
вместо HashSet
, конечно, если ваше намерение для редактирования таблицы данных. A LinkedHashSet
поддерживает упорядочение элементов.