Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jsf: выпадающие списки / 11 сообщений из 11, страница 1 из 1
05.07.2006, 16:12
    #33833373
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
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
06.07.2006, 12:40
    #33835302
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
а при смене договора вызывается пересчет таблицы? если нет, то рекомендую вызвать.

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

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

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

хотелось бы код бина посмотреть, чтобы понять, что, где и в какой последовательности вызывается
...
Рейтинг: 0 / 0
06.07.2006, 13:40
    #33835540
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
у selectOneMenu есть valueChangeListener
...
Рейтинг: 0 / 0
06.07.2006, 14:00
    #33835590
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
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
06.07.2006, 15:50
    #33836054
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
конечно 2 раза
на этапе применения значений (apply values) и при вызове setRepID(-1);
нужно завести приват поле в бине для хранения текущего значения, сделать для него простые сетер и гетер. а бизнес логику выносить в другие методы
...
Рейтинг: 0 / 0
06.07.2006, 16:52
    #33836350
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
Deadyконечно 2 раза
на этапе применения значений (apply values) и при вызове setRepID(-1);
нужно завести приват поле в бине для хранения текущего значения, сделать для него простые сетер и гетер. а бизнес логику выносить в другие методы
вот наконец-то меня поняли
только происходит apply values для договора в котором я делаю setRepID(-1) а потом apply values для счетов.
хорошо, допустим я сделаю простые сетеры и гетеры, а поможет ли это?
т.е. я поменял договор, в dogID запишется новое значение, а repID в силу apply values старое, которое явно не соответствует новому dogID. Даже если я добавлю valueChangeListener так получится что repID все равно будет старым?
как быть?
...
Рейтинг: 0 / 0
06.07.2006, 23:17
    #33837021
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
фаза обработки событий идет после фазы применения, поэтому можете смело а обработчике changeListener для договора присвоить новое значение отчету
...
Рейтинг: 0 / 0
07.07.2006, 12:48
    #33838079
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
Deadyфаза обработки событий идет после фазы применения, поэтому можете смело а обработчике changeListener для договора присвоить новое значение отчету
странно у меня сначала происходит valueChangeListener, а потом сетер
...
Рейтинг: 0 / 0
07.07.2006, 17:39
    #33839310
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jsf: выпадающие списки
Michael Ponomarev
странно у меня сначала происходит valueChangeListener, а потом сетер
Более, того вообще ничего не понимаю:
при смене договора может сначала getDBRows - это таблица с деталями счетов, затем valueChangeListener и только затем сетеры
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / jsf: выпадающие списки / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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