powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / jsf: выпадающие списки
11 сообщений из 11, страница 1 из 1
jsf: выпадающие списки
    #33833373
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jsf(от MyFaces).
Есть 2 выпадающих списка и таблица. 1 спосок - договоры. 2 - счета и в таблице уже детальная информация по счетам. Т.е. отношение master-detail-subdetail. Соответственно 2 переменные для списков dogID и repID. При выборе в 1 списке (договоры) 2 список (счета) обновляется, в нем берется счет и ID этого счета уже идет параметром в запрос для таблицы(которая есть детальная инфа по счету). Соответствующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<h:outputText value="№ Договора"/>
<t:selectOneMenu id="somNDogovor" value="#{sessionData.account.dogID}"
    onchange="submit();">
    <f:selectItems id="siNDogovor" value="#{sessionData.account.dogovor}"/>
</t:selectOneMenu>
<h:outputText value="№ Отчета"/>
<t:selectOneMenu id="somCReport" value="#{sessionData.account.repID}"
    onchange="submit();">
    <f:selectItems id="siCReport" value="#{sessionData.account.CReport}"/>
</t:selectOneMenu>
А вот тут начинаются проблемы: выбрали договор, естественно, при смене договора меняются все счета, т.е. сменилcя dogID, там же я меняю repID(просто беру id первого счета), НО, фейсы потом еще раз пишут значение repID. Т.е. сначала у меня происходит изменение repID, а потом фейсы пишут старое значение. Соответственно старое детальная часть счета (таблица) не меняется. Если же я просто меняю счет без изменения договора, то естественно все нормально и таблица показывается правильно.
Как с этим бороться?
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33835302
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а при смене договора вызывается пересчет таблицы? если нет, то рекомендую вызвать.

и вообще, onClick() - это не jsf подход. лучше использовать action или actionListener
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33835446
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadyа при смене договора вызывается пересчет таблицы? если нет, то рекомендую вызвать.

и вообще, onClick() - это не jsf подход. лучше использовать action или actionListener
при смене договора сначала меняются счета, (берется 1 счет относящийся к договору), затем для этого счета пересчитывается таблица.
проблема не в этом:
при смене договора 1. -меняется счет и перечитывается таблица
2. а затем фейсы ставят назад значение счета и у меня снова происходит пересчет

у selectOneMenu нет action или actionListener
другого способа сделать submit я не знаю
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33835537
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно сделать хиден кнопку, и кликать ее из скрипта. кнопке навесить нужный action. я последнее время использую библиотеку ajax4jsf - там можно action навесить на событие типа onClick.

хотелось бы код бина посмотреть, чтобы понять, что, где и в какой последовательности вызывается
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33835540
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у selectOneMenu есть valueChangeListener
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33835590
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quCReport - счета (оболочка над resultSet)
quCRepContent - таблица содержания счетов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
     public   int  getDogID() {
         return  dogID;
    }

     public   void  setDogID( int  dogID) {
         if  (repID == - 1  &&  this .dogID == dogID) {
            quCReport.clearRows();
        }
         if  ( this .dogID != dogID) {
             this .dogID = dogID;
            repDate =  null ;
            quCReport.clearRows();
            
            PreparedStatement ps =  null ;
            
             try  {
                ps = quCReport.prepareSelectQuery();
                ps.setInt( 1 , dogID);
                quCReport.executeSelect();
                quCReport.closeQuery();
                 if  (quCReport.getRowCount() >  0 ) {
                    setRepID(Integer.parseInt(quCReport.getDBRows()[ 0 ].getField( 1 )));
                    repDate = CommonUtils.stringToDate(quCReport.getDBRows()[ 0 ].getField( 4 ));
                }  else  {
                    setRepID(- 1 );
                }
            }  catch  (SQLException ex) {
// здесь идет обработка catch пропустим для читаемости
            }
        }
    }

     public   int  getRepID() {
         return  repID;
    }

     public   void  setRepID( int  repID) {
         if  (repID == - 1 ) {
            quCRepContent.clearRows();
        }
         if  ( this .repID != repID) {
             this .repID = repID;
            quCRepContent.clearRows();
            
            PreparedStatement ps =  null ;
        
             try  {
                ps = quCRepContent.prepareSelectQuery();
                ps.setInt( 1 ,  this .repID);
                quCRepContent.executeSelect();
                quCRepContent.closeQuery();
            }  catch  (SQLException ex) {
// здесь идет обработка catch пропустим для читаемости
            }
        }
    }
факт в том что попадаем в setRepID 2 РАЗА при смене договора.
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33836054
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно 2 раза
на этапе применения значений (apply values) и при вызове setRepID(-1);
нужно завести приват поле в бине для хранения текущего значения, сделать для него простые сетер и гетер. а бизнес логику выносить в другие методы
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33836350
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadyконечно 2 раза
на этапе применения значений (apply values) и при вызове setRepID(-1);
нужно завести приват поле в бине для хранения текущего значения, сделать для него простые сетер и гетер. а бизнес логику выносить в другие методы
вот наконец-то меня поняли
только происходит apply values для договора в котором я делаю setRepID(-1) а потом apply values для счетов.
хорошо, допустим я сделаю простые сетеры и гетеры, а поможет ли это?
т.е. я поменял договор, в dogID запишется новое значение, а repID в силу apply values старое, которое явно не соответствует новому dogID. Даже если я добавлю valueChangeListener так получится что repID все равно будет старым?
как быть?
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33837021
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фаза обработки событий идет после фазы применения, поэтому можете смело а обработчике changeListener для договора присвоить новое значение отчету
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33838079
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadyфаза обработки событий идет после фазы применения, поэтому можете смело а обработчике changeListener для договора присвоить новое значение отчету
странно у меня сначала происходит valueChangeListener, а потом сетер
...
Рейтинг: 0 / 0
jsf: выпадающие списки
    #33839310
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Ponomarev
странно у меня сначала происходит valueChangeListener, а потом сетер
Более, того вообще ничего не понимаю:
при смене договора может сначала getDBRows - это таблица с деталями счетов, затем valueChangeListener и только затем сетеры
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / jsf: выпадающие списки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]