![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Такая ситуация, есть форма на к-ой может располагаться произвольное кол-во select-ов (h:selectOneMenu). У каждого select-А должен быть свой уникальный числовой id. Как правильно средаствами JSF передать все эти значения с формы в actionListener? И соотвественно как в нём их получить?
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
fics |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 21.2.2008 Где: Луганск Репутация: нет Всего: нет |
Ceйчас может быть запинают но все же, могу подсказать как в JSP делаеться:
к примеру <select name="sel"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <select> String[] option = requestgetparameterValues("sel") --------------------
Ушел на пары |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
3,14, Value Binding ?
![]() Например через Map (т. е. в бине mybean поле допустим selvalues типа Map<String, String>), а на странице:
Это сообщение отредактировал(а) ivg - 4.3.2008, 17:41 |
|||
|
||||
3,14 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Всё равно что то не поулчилось, вот что у меня есть:
Те селекты выводятся внутри цикла, и id-ком для Map должен быть id перебираемого элемента. Те есть ряд боксов, для каждого из них будет выбираться ip-ник. Но не работает.
Map-а в bean-е не оказывается. Метод getAddressesId возвращает null. :( -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||
|
|||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Да, чуть не забыл:
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
ivg |
|
||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
А что не попробовали создать инстанс Map в конструкторе бина? JSF сам его не создает. Тип ключа для Map<>, должен соответствовать типу box.id, правда я не уверен что вот такая конструкция сработает
, хотя по идее должна. Надо пробовать. |
||||||
|
|||||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
ivg, имено такая конструкция и не работает. Добавлю ещё что там проблемы с использованием тэга ui:repeat, данные не передаются. Вместо этого нужно использовать c:forEach. Но вот проблема с тем что индексация не работает осталась... (
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
а
на
заменить не пробовали? Вроде ничего не мешает. |
||||
|
|||||
3,14 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
С dataTable всё отображается нормально, но тоже не работает, как и с forEach
![]() Добавляем на форму:
Все селекты отбражаются нормально. В обработчике:
В лог не валится никаких значений :( Впрочем и ошибок тоже... -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||
|
|||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
В чём проблема я кажется понял. Рзбор EL выражения для binding-а (#{configBean.test[box.id]}) происходит после нажатия на кнопку Save на форме, а не при создании формы. Поэтому ни о каких bean-ах обьявленных циклом forEach или dataTable (в данном случае box) он знать не знает :(
Но вот как решить проблему так и не понятно :( -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
ivg |
|
||||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Нашёл время попробовать ваш пример
![]() Могу сказать, что у меня первый вариант с jsfc="ui:repeat" работает так как надо. Похоже проблема у вас в чём то другом. В версиях библиотек, каких то конфиг параметрах, .... Я использовал JSF Sun RI 1.2, faselets 1.1.12, Tomcat 6, JVM 6.0, дебажил из под Eclipse 3.3 с WTP. На всякий случай запощу сюда несколько файликов: web.xml
faces-config.xml
Страница index.xhtml
com.mycompany.myapp.ConfigBean .java:
|
||||||||
|
|||||||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Подожди, что то я не совсем понял, вроде как метод save у вызывается для boxBean, а реализация написанна в configBean????
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
м-да, проблема и не в библиотеках. сделал отдельно этот же пример, работает, буду копать что не так в основном коде...
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
3,14 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Вот теперь я совсем запутался. Вот этот кусок для select-а, нормально рабочий (привожу для дальнейших объяснений), в общем то ничего по сравнению с первым разом не изменилось:
А теперь самое интересное, при этой ф-ии для boxBean.configList всё равботает и данные передаются:
А вот для этого отображаются правильно, но не передаются:
![]() ![]() ![]() -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||||
|
|||||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Ну класс для boxBean приводить не стал, там код для save() полностью ваш. Что касается последних непоняток, то попробую предположить, что в классе BoxBean перепутаны id и, допустим, config_id. Например в вызываемом конструкторе, или геттер для id возвращает значение config_id. В этом случае, в интересующей нас Map'е окажется всего одно значение, вместо нескольких. По сути, приведённые реализации метода getConfigList(), отличаются только значениями параметров конструктора BoxBean(). В первом случае, для всех элементов вектора они разные, а во втором значение config_id одно. Если мое предположение не верное, тогда покажите код класса BoxBean что ли. Интересуют конструкторы, геттеры/сеттеры, equals(), hashCode(). И вот значение configId из 6 строки второй реализации, когда изменяется и при каких условиях? Это сообщение отредактировал(а) ivg - 13.3.2008, 22:57 |
|||
|
||||
3,14 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
ivg, нет, там что то не то, и совсем не понятное. Вот так работает (кусок из getConfigList):
Вот так не работает:
Причём в обоих случаях bean создаётся, и создатся ровно один bean. В обоих случаях select-ы отображаются, но при первом варианте данные передаются на сервер (кусок лога):
а во втором нет
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||||||
|
|||||||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Тогда вот с этим вариантом вопрос остаётся. В процессе обработки запроса метод getConfigList() вызывается несколько раз на разных фазах и каждый раз идёт обращение к БД. Проверьте под отладчиком, например, что каждый раз возвращаются одни и те же данные. А вообще если у вас bean request scope, может имеет смысл в бине хранить List<BoxBean> boxes, а не ходить в БД каждый раз. |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Действиетльно метож вызывается 2 раза, с первым всё понятно, он вызывается при создании таблицы. Там всё отрабатывает правильно. Но зачем он вызывается второй раз, при нажатии кнопки save (там то как раз configId не выставляется). Формы, на к-ой выводятся select-ы, после нажатия save уже не отображается. Да и configBean там уже другой используется, список в классе не сохранишь :(
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
По идее, должен больше. В процессе обработки одного запроса почти на каждой фазе, а их там штук 6, если мне память не изменяет.
Кстати говоря, это уже другой запрос, и следовательно объекты reques scope бинов тоже уже другие. А вызывается он каждый раз, потому что JSF не хранит данные, она работает только с информацией о биндинге (Что то типа ссылки на значение) т. е. value="#{boxBean.configList}", и каждый раз когда данные необходимы этот биндинг резолвится. (Ссори за корявое выражение, лучше не придумал ![]() Ну вобщем проблема ясна. Сложно предложить какое то решение, ибо специфика не известна. Как насчёт, вынести переменную configId в session scope? Ну и
а данные получать при первом вызове (lazy loading). Это сообщение отредактировал(а) ivg - 17.3.2008, 13:19 |
||||
|
|||||
3,14 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Не помогло :( Сделал срок жизни boxBean-у: session, список сделал членом класса. Один фиг, когда запрашивает configList второй раз, список оказывается пустым:
Вот что вывалилось в лог:
Список, кроме как в этой ф-ии, нигде больше не изменяется. -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
||||
|
|||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Уверены? Добавьте в начало метода
Если значения будут разные при обоих вызовах, значит объекты бинов тоже разные. Тогда этим и объясняется, почему при втором вызове метода поле boxes == null. Вот ещё, кстати, я кажется понял, почему всего два раза этот метод вызывается. У вас на кнопке save установлен атрибут immediate="true" и action="...", который перенаправляет на другую страницу? Уберите immediate="true". Потому что иначе обработка запроса не дойдёт до фазы UPDATE_MODEL_VALUES, в которой значения в интересующей нас Map<...> и обновляются. |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Объекты бинов разные, но почему не понятно :( Как же там сохранять список, если метод вызывается для разных объектов...
![]() Кнопку save изменил:
Тоже не помогло... ![]() -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
||||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
faces-config.xml:
контейнер: jboss-4.2.0.GA куки включенны. -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
с tomcat 6 та же проблема.
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
Даа, интересно... Что ж с сессиями то... Как я понимаю, это вроде единственная нерешённая проблема?
Может вы выложите проект? А то что то ходим всё вокруг да около.... Ну или хотя бы покажите код класса com.nortelnetworks.beans.config.BoxBean, web.xml, context.xml (если есть), ну и какие там у вас конфиги... Версия JSF? Чья имплементация? PS: В List<BoxBean> boxes класс BoxBean это то же самое что и com.nortelnetworks.beans.config.BoxBean? |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Да Прикрепил к сообщению, вырезал только jar-ы, и файлы БД чтоб архив меньше места занимал. Библиотеки для JSF идут вместе с jboss. jsf-api.jar Specification-Version: 1.2MR1 Implementation-Vendor-Id: com.sun Extension-Name: javax.faces Implementation-Version: 1.2_04-b10-p01 Implementation-Vendor: Sun Microsystems, Inc. jsf-impl.jar Specification-Version: 1.2MR1 Implementation-Vendor-Id: com.sun Extension-Name: com.sun.faces Implementation-Version: 1.2_04-b10-p01 Implementation-Vendor: Sun Microsystems, Inc. jboss-faces.jar Specification-Version: 4.2.0.GA Implementation-Vendor-Id: http://www.jboss.org/ Implementation-Version: 4.2.0.GA (build: SVNTag=JBoss_4_2_0_GA date=20 0705111440) Implementation-Vendor: JBoss Inc. Ещё используется (не jboss-кий jar, включаю в приложение): jsf-facelets Created-By: 1.5.0_09-b03 (Sun Microsystems Inc.) Implementation-Version: 1.1.13
Да Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Разобрался. Хотя bean scope я обьявил как session, но этот bean у меня добавлялся ручками,а не создавался автоматом. И я просто забыл поменять, чтоб он добавился в Map сессии, а не запроса.
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
Fedrus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Предлагаю вам написать статью-урок и разместь здесь на форуме очь полезно будет))
(ну если конечьно не лень) --------------------
Если вы идете через ад, идите не останавливаясь. |
|||
|
||||
3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: 3 Всего: 24 |
Fedrus, где нить через неделю-другую, как времени больше свободного будет.
-------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
Fedrus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
О спасибо думаю и не только я скажу тебе спасибо, будет полезная статья с этой проблеммой думаю многие сталкиваются!!
Я и сам думал предложить разобраться и написать статью но опыта маловато и тоже время.... PS я в свое время в проекте зделал все через ж и оставил до лучьших времен(так как сроки поджимали) вот руки дойдут переделаю))) --------------------
Если вы идете через ад, идите не останавливаясь. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |