![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| landpro |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Добрый день, господа!
Каким же образом реализовать эту тривиальную задачу? Описываю ситуацию. Есть hibernate сущности - UserGroup & User.. Хочется вывести на странице все UserGroups и под каждой группой ее Users. Делаю страничку JSF, в ней регистрирую контроллер UserGroupController, в котором делаю метод getUserGroups(), который в свою очередь делает HQL запрос всех групп, получает Set, конвертит в ListDataModel и возвращает. Ok, группы вывел. Как же вывести Users? У UserGroup как водится есть атрибут - коллекция Users. Уж очень хочется написать что-нибудь типа h:datatable value="#{userGroupController.users}", однако нельзя - коллекция Set. Вопрос в том, где мне конвертировать Set в ListDataModel? Делать это прямо в классе UserGroup - несерьезно - это класс относится к слою модели, а ListDataModel - это тип данных представления. Жду ваших мыслей, умы Заранее спасибо! |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Извиняюсь за предыдущие ответы на ваш вопрос, но хотелось бы знать, вариант указанный здесь не работает?
А по этой теме можно использовать javax.faces.model.ArrayDataModel, для этого значение атрибута value элемента <h:dataTable ... /> должно иметь тип Object[], то есть в данном случае проще всего будет указать value="#{userGroupController.users.toArray}" |
|||
|
||||
| landpro |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
ivg, спасибо за ответ и внимание
вариант с <list> отказывается правильно работать, уж не знаю почему. На сановском форуме мне вообще написали, что неправильно менять модель из-за проблем с выводом.... Типа это задача бизнес слоя. Согласившись с этим, я написал конвертор для коллекции первого уровня вложенности (кстати, в этом же месте можно теперь управлять сортировкой элементов в коллекции), но теперь не понятно в каком месте вставить конвертор для внутренних уровней. Не совсем понял идею с #{userGroupController.users.toArray}. А так разве можно? т.е. вызовется toArray(), а не getToArray() ? |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Точно ведь. Блин опять перепутал. (EL с Velocity Не знаю, что даже и посоветовать. Эх жаль, что EL такого не позволяет (Вообще он не рулит, по сравнению например с Velocity Template Language). Проще всего наверно, добавить в модель, для нужных сущностей методы типа getUserList() например, который будет на лету конвертировать Set<?> в List<?>, ну а сам метод конвертации можно наверно вынести в отдельный класс и сделать его static. Я думаю, такой подход особого влияния на модель не окажет, зато можно будет делать например вот так value="#{userGroupController.currentUserGroup.userList}", а ведь, на сколько я понял именно это хочется получить? В голову приходит ещё написать обёртки для классов модели, и использовать их при выводе, но это те же опять 25 - при доступе к внутренним коллекциям сущностей в контроллере нужно будет отслеживать сей факт, а именно этого и хочется избежать. |
|||
|
||||
| landpro |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Да, ivg!
Теперь ты меня полностью понял, супер! Понятно, что это легко добавить метод в модель, но опять же этот метод будет относиться к бизнес логике.... На верно пока так и сделаю, чтобы не стопорится, если что интересней придумаю - напишу. Со статическим методом это, конечно, гуд. Но опять же нюанс. Когда переводишь Set в List хочется управлять сортировкой, а это еще один параметр В общем пока буду жить так и двигаться дальше. Спасибо! |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Ещё вариант: переписать класс javax.faces.component.UIData, таким образом, чтобы он при получении Set<?>, автоматом конвертил бы его в List<?> и выбирал соответственно ListDataModel. (
Ну или если уж совсем по правильному, то такой подход подразумевает создание своего компонента, который в этой части будет раcширять поведение стандартного h:dataTable. Как такой вариант? До кучи, можно будет придумать и атрибут, который будет указывать на условие(я) сортировки при конвертировании. |
|||
|
||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: 1 Всего: 3 |
Если я не ошибаюсь, если написать такой метод getUserList() который будет конвертить Set в List, то он не вызовется, т.к. кроме того что есть метод типа getXxx должно быть ещё поле xxx и метод setXxx, и даже тогда JSF не будет вызывать метод, а возьмет значение самого поля xxx. --------------------
qip |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |