У меня проблема с JSF 2. Я использую Mojarra 2.1.14 с Primefaces 3.1.4.
У меня есть страница с двумя формами: formA и formB. Каждая из этих форм содержит ViewState в скрытом поле ввода.
<h:form id="formA" binding="#{sessionBean.formA}">
<h:commandButton value="formA" action="#{sessionBean.actionA}">
<f:ajax/>
</h:commandButton>
</h:form>
<h:form id="formB" binding="#{sessionBean.formB}">
<h:commandButton value="formB" action="#{sessionBean.actionB}">
<f:ajax/>
</h:commandButton>
</h:form>
Пользователь отправляет formA с действием Ajax. Внутри действия Java я явно обновляю formA и formB (которые привязаны).
public void actionA(){
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(formA.getClientId());
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(formB.getClientId());
System.out.println("action A!!");
}
public void actionB(){
System.out.println("action B!!");
}
В ответах Ajax есть HTML-код для formA и formB (элемент) и ViewState.
JSF обновляет HTML-код formA и formB и устанавливает ViewState вызывающей формы: formA. formB не содержит ViewState.
Пользователь отправляет formB с действием Ajax. Поскольку ViewState не определен, postBack имеет значение false, а renderResponse устанавливается в значение true на этапе RESTORE, пропуская этап INVOKE APPLICATION: действие не вызывается. После того, как ответ VIEW_STATE обновлен и если пользователь подводит formB, вызывается действие.
Это ошибка или ограничение JSF 2? Или я что-то не так делаю?
Вы можете найти проект maven на GitHub: https://github.com/nithril/jsf-multiple-form
Заранее спасибо за помощь!
render=":formB"
внутри тегаf:ajax
. - person partlov   schedule 02.02.2013