2 tr: selectOneChoice ValueChangeListeners вызывает тот же метод действия - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть 2 компонента tr: selectOneChoice, и у каждого есть свой метод valueChangeListener. Проблема заключается в том, что при изменении значения из выпадающего списка 1 будет вызываться метод действия 1, который ожидается.

Но при изменении значения из выпадающего списка 2 он будет вызывать метод действия 1 и метод действия 2 в порядке, что действительно странно, он вообще не должен вызывать метод действия 1. Хуже всего то, что, даже если я нажму на разные кнопки, которые у меня есть на одной странице, они оба вызовут оба метода действий по порядку, что действительно плохо, и я не знаю, как это объяснить.

Я использую MyFaces, Facelets, Тринидад. Большое спасибо.

1 Ответ

0 голосов
/ 30 декабря 2010

valueChangeListener будет вызываться только в том случае, если переданное значение отличается от значения, возвращаемого связанным получателем на этапе проверки.Одна из наиболее распространенных причин вашей конкретной проблемы заключается в том, что bean-компонент является областью действия запроса и исходное значение не сохраняется.

Если вы использовали JSF 2.0, вам нужно поместить bean-компонент в область действия view, чтобы он был сохранен при последующих последующих запросах в том же представлении.Но когда вы все еще используете 1.x, тогда самое простое решение - поместить компонент в область действия сеанса.Тем не менее, это также имеет свои недостатки;когда пользователь открывает одну и ту же страницу в разных вкладках / окнах в одном сеансе браузера, они будут мешать друг другу.Лучшее решение - использовать Томагавк <t:saveState>.Поместите следующую строку где-нибудь на странице с формой с выпадающими списками:

<t:saveState value="#{bean}" />

Таким образом, компонент будет сохранен в последующих запросах в том же представлении, которое действует как новая область JSF 2.0 view..

...