Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSF, передача значений множества select-ов 
V
    Опции темы
3,14
  Дата 14.3.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



ivg, нет, там что то не то, и совсем не понятное. Вот так работает (кусок из getConfigList):
Код

            String sql = "SELECT * FROM em_boxes WHERE config_id=?";
            PreparedStatement stmt = DBConnectionProvider.getPreparedStatement(sql);
            stmt.setInt(1, configId);
            ResultSet data = stmt.executeQuery();
            for(int i = 0; data.next(); i++) {
            }
            for(int i = 0; i < 1; i++) {
                boxes.add(new BoxBean(i, i, i, "box_" + i));
            }
            data.close();
            stmt.close();

Вот так не работает:
Код

            String sql = "SELECT * FROM em_boxes WHERE config_id=?";
            PreparedStatement stmt = DBConnectionProvider.getPreparedStatement(sql);
            stmt.setInt(1, configId);
            ResultSet data = stmt.executeQuery();
            for(int i = 0; data.next(); i++) {
                boxes.add(new BoxBean(i, i, i, "box_" + i));
            }
            data.close();
            stmt.close();

Причём в обоих случаях bean создаётся, и создатся ровно один bean. В обоих случаях select-ы отображаются, но при первом варианте данные передаются на сервер (кусок лога):
Цитата

12:02:07,827 INFO  [STDOUT] ========= save
12:02:07,843 INFO  [STDOUT] BOX ID: 0, IP ID: 2
12:02:07,843 INFO  [STDOUT] ========= /save

а во втором нет
Цитата

12:07:38,674 INFO  [STDOUT] ========= save
12:07:38,674 INFO  [STDOUT] ========= /save



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
ivg
Дата 14.3.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(ivg @  13.3.2008,  22:47 Найти цитируемый пост)
И вот значение configId из 6 строки второй реализации, когда изменяется и при каких условиях?

Тогда вот с этим вариантом вопрос остаётся. В процессе обработки запроса метод getConfigList() вызывается несколько раз на разных фазах и каждый раз идёт обращение к БД. Проверьте под отладчиком, например, что каждый раз возвращаются одни и те же данные. А вообще если у вас bean request scope, может имеет смысл в бине хранить List<BoxBean> boxes, а не ходить в БД каждый раз.
PM MAIL   Вверх
3,14
Дата 17.3.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Действиетльно метож вызывается 2 раза, с первым всё понятно, он вызывается при создании таблицы. Там всё отрабатывает правильно. Но зачем он вызывается второй раз, при нажатии кнопки save (там то как раз configId не выставляется). Формы, на к-ой выводятся select-ы, после нажатия save уже не отображается. Да и configBean там уже другой используется, список в классе не сохранишь :(


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
ivg
Дата 17.3.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(3 @ 14, 17.3.2008,  12:45 Найти цитируемый пост)
Действиетльно метож вызывается 2 раза

По идее, должен больше. В процессе обработки одного запроса почти на каждой фазе, а их там штук 6, если мне память не изменяет.
Цитата(3 @ 14, 17.3.2008,  12:45 Найти цитируемый пост)
Но зачем он вызывается второй раз, при нажатии кнопки save (там то как раз configId не выставляется)

Кстати говоря, это уже другой запрос, и следовательно объекты reques scope бинов тоже уже другие.
А вызывается он каждый раз, потому что JSF не хранит данные, она работает только с информацией о биндинге (Что то типа ссылки на значение) т. е. value="#{boxBean.configList}", и каждый раз когда данные необходимы этот биндинг резолвится. (Ссори за корявое выражение, лучше не придумал  smile ). Ну естественно, если на фазе UPDATE_VALUES, или как там её, List<BoxBean> возвращается пустой никакого update values не происходит.

Ну вобщем проблема ясна. Сложно предложить какое то решение, ибо специфика не известна.
Как насчёт, вынести переменную configId в session scope?
Ну и 
Цитата(ivg @  14.3.2008,  12:52 Найти цитируемый пост)
может имеет смысл в бине хранить List<BoxBean> boxes, а не ходить в БД каждый раз.

а данные получать при первом вызове (lazy loading).

Это сообщение отредактировал(а) ivg - 17.3.2008, 13:19
PM MAIL   Вверх
3,14
Дата 17.3.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Не помогло :( Сделал срок жизни boxBean-у: session, список сделал членом класса. Один фиг, когда запрашивает configList второй раз, список оказывается пустым:
Код

    public List<BoxBean> getConfigList() {
        System.out.print("====== getConfigList");
        if (boxes == null || boxes.size() == 0) {
            System.out.print("if");
            boxes = new Vector<BoxBean> ();
            try {
                String sql = "SELECT * FROM em_boxes WHERE config_id=?";
                PreparedStatement stmt = DBConnectionProvider.getPreparedStatement(sql);
                stmt.setInt(1, configId);
                ResultSet data = stmt.executeQuery();
                for(int i = 0; data.next(); i++) {
                    System.out.print("creating bean");
                    boxes.add(new BoxBean(i, i, i, "box_" + i));
                    System.out.print("bean created");
                }
                data.close();
                stmt.close();
            } catch(Exception e) {
                e.printStackTrace();
            }
            System.out.print("/if");
        }

        System.out.print("====== /getConfigList");
        return boxes;
    }


Вот что вывалилось в лог:
Цитата

16:47:27,425 INFO  [STDOUT] ====== getConfigList
16:47:27,425 INFO  [STDOUT] if
16:47:27,441 INFO  [STDOUT] creating bean
16:47:27,441 INFO  [STDOUT] bean created
16:47:27,441 INFO  [STDOUT] /if
16:47:27,441 INFO  [STDOUT] ====== /getConfigList
16:47:30,644 INFO  [STDOUT] ====== getConfigList
16:47:30,707 INFO  [STDOUT] if
16:47:30,707 INFO  [STDOUT] /if
16:47:30,707 INFO  [STDOUT] ====== /getConfigList

Список, кроме как в этой ф-ии, нигде больше не изменяется.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
ivg
Дата 17.3.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(3 @ 14, 17.3.2008,  16:54 Найти цитируемый пост)
Сделал срок жизни boxBean-у: session

Уверены? Добавьте в начало метода
Код

System.out.println("boxBean identity hash code: " + System.identityHashCode(this));

Если значения будут разные при обоих вызовах, значит объекты бинов тоже разные. Тогда этим и объясняется, почему при втором вызове метода поле boxes == null.
Вот ещё, кстати, я кажется понял, почему всего два раза этот метод вызывается. У вас на кнопке save установлен атрибут immediate="true" и action="...", который перенаправляет на другую страницу?
Уберите immediate="true". Потому что иначе обработка запроса не дойдёт до фазы UPDATE_MODEL_VALUES, в которой значения в интересующей нас Map<...> и обновляются.

PM MAIL   Вверх
3,14
Дата 18.3.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Объекты бинов разные, но почему не понятно :( Как же там сохранять список, если метод вызывается для разных объектов...  smile 
Кнопку save изменил:
Код

      <h:commandButton actionListener="#{configBean.save}" value="Save" />

Тоже не помогло...  smile 



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
ivg
Дата 18.3.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(3 @ 14, 18.3.2008,  12:50 Найти цитируемый пост)
Объекты бинов разные, но почему не понятно

Вот, вот...
Покажите faces-config.xml.
Что за контейнер (или апп-сервер)?
В браузере кукисы включены?

Это сообщение отредактировал(а) ivg - 18.3.2008, 13:04
PM MAIL   Вверх
3,14
Дата 18.3.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



faces-config.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    version="1.2">

   <!-- from project setup -->
   <application>
     <view-handler>
       com.sun.facelets.FaceletViewHandler
     </view-handler>    
   </application>
   
   <managed-bean>
    <managed-bean-name>
    ipBean</managed-bean-name>
    <managed-bean-class>
    com.nortelnetworks.beans.ip.IpBean</managed-bean-class>
    <managed-bean-scope>
    request</managed-bean-scope>
   </managed-bean>
   <managed-bean>
    <managed-bean-name>
    ipManagerBean</managed-bean-name>
    <managed-bean-class>
    com.nortelnetworks.beans.ip.IpManagerBean</managed-bean-class>
    <managed-bean-scope>
    request</managed-bean-scope>
   </managed-bean>
   <managed-bean>
    <managed-bean-name>
    configBean</managed-bean-name>
    <managed-bean-class>
    com.nortelnetworks.beans.config.ConfigBean</managed-bean-class>
    <managed-bean-scope>
    request</managed-bean-scope>
   </managed-bean>
   <managed-bean>
    <managed-bean-name>
    configManagerBean</managed-bean-name>
    <managed-bean-class>
    com.nortelnetworks.beans.config.ConfigManagerBean</managed-bean-class>
    <managed-bean-scope>
    request</managed-bean-scope>
   </managed-bean>
   <managed-bean>
    <managed-bean-name>
    boxBean</managed-bean-name>
    <managed-bean-class>
    com.nortelnetworks.beans.config.BoxBean</managed-bean-class>
    <managed-bean-scope>
    session</managed-bean-scope>
   </managed-bean>

</faces-config>


контейнер: jboss-4.2.0.GA
куки включенны.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
3,14
Дата 18.3.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



с tomcat 6 та же проблема.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
ivg
Дата 18.3.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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?
PM MAIL   Вверх
3,14
Дата 19.3.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Цитата(ivg @  18.3.2008,  18:54 Найти цитируемый пост)
Как я понимаю, это вроде единственная нерешённая проблема?

Да

Цитата(ivg @  18.3.2008,  18:54 Найти цитируемый пост)
Может вы выложите проект? А то что то ходим всё вокруг да около....

Прикрепил к сообщению, вырезал только jar-ы, и файлы БД чтоб архив меньше места занимал.

Цитата(ivg @  18.3.2008,  18:54 Найти цитируемый пост)
Версия JSF? Чья имплементация?

Библиотеки для 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



Цитата(ivg @  18.3.2008,  18:54 Найти цитируемый пост)
PS: В List<BoxBean> boxes класс BoxBean это то же самое что и com.nortelnetworks.beans.config.BoxBean? 

Да


Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  prj.zip 41,10 Kb


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
3,14
Дата 20.3.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Разобрался. Хотя bean scope я обьявил как session, но этот bean у меня добавлялся ручками,а не создавался автоматом. И я просто забыл поменять, чтоб он добавился в Map сессии, а не запроса.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Fedrus
Дата 21.3.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Предлагаю вам написать статью-урок и разместь здесь на форуме очь полезно будет))
(ну если конечьно не лень)
--------------------
Если вы идете через ад, идите не останавливаясь.
PM MAIL   Вверх
3,14
Дата 21.3.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 3
Всего: 24



Fedrus, где нить через неделю-другую, как времени больше свободного будет.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1277 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.