Ответ 1
Кажется, вы ожидаете, что метод valueChangeListener
на стороне сервера вызывается немедленно, когда событие изменения происходит на стороне клиента. Это неверно. Он будет вызываться только тогда, когда форма отправлена на сервер, а новое значение не equals()
старое значение.
Существует как минимум два способа достижения вашего функционального требования:
-
Добавьте
onchange="submit()"
, чтобы JavaScript передавал форму всякий раз, когда вы меняете значение:<p:selectOneMenu style="width: 220px;" value="#{customerProfileSessionBean.selectedAccount}" valueChangeListener="#{customerProfileSessionBean.accountValueChange}" onchange="submit()"> <f:selectItems value="#{sessionBean1.custAccountList}"/> </p:selectOneMenu>
Это, однако, очень JSF-1.x-ish и плохо для пользователей. Он также будет отправлять (и конвертировать/проверять!) Все другие поля ввода, которые могут быть не такими, какие вы хотите.
-
Вместо этого используйте прослушиватель ajax, наверняка, если вас не интересует фактическое изменение значения (т.е. старое значение вам не интересно), но вы действительно заинтересованы в самом событии изменения. Вы можете сделать это с помощью
<f:ajax>
или в компонентах PrimeFaces с помощью<p:ajax>
:<p:selectOneMenu style="width: 220px;" value="#{customerProfileSessionBean.selectedAccount}"> <p:ajax listener="#{customerProfileSessionBean.accountValueChange}" /> <f:selectItems value="#{sessionBean1.custAccountList}"/> </p:selectOneMenu>
И замените аргумент
ValueChangeEvent
аргументомAjaxBehaviorEvent
.