JSF 2に問題があります。Mojarra 2.1.14とPrimefaces 3.1.4を使用しています
formAとformBの 2 つのフォームを含むページがあります。2 つのフォームには、非表示の入力フィールドにそれぞれ 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>
ユーザーがAjax アクションを使用してformAを送信します。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 応答には、formAとformB (要素) および ViewState の HTML コードがあります。
JSF はformAとformBの HTML を更新し、呼び出し元のフォームformAの ViewState を設定します。 formBには ViewState が含まれていません。
ユーザーが Ajax アクションを使用してformBを送信します。ViewState が定義されていないため、RESTORE フェーズで postBack が false に設定され、renderResponse が true に設定され、INVOKE APPLICATION フェーズがスキップされます。アクションは呼び出されません。応答 VIEW_STATE が更新された後、ユーザーがformBを送信すると、アクションが呼び出されます。
それは JSF 2 のバグですか、それとも制限ですか? または私は何か間違っていますか?
GitHub で Maven プロジェクトを見つけることができます: https://github.com/nithril/jsf-multiple-form
よろしくお願いします。