2 つのフォームで構成される単純なページがあります。それらを同時に表示することはできません (一方が他方を切り替えます)。コードは次のとおりです。
<h:body>
<ui:composition template="/elements/templateWithMenu.xhtml">
<ui:define name="content">
<p:dialog id="question1DialogId" widgetVar="question1Dialog" resizable="false" closable="false" visible="true">
<h:panelGroup id="questionStep1Group">
<h:form id="questionStep1Form" rendered="#{newPoll2.displayQuestionStep1}">
<h:commandLink value="next" action="#{newPoll2.questionStep1Completed()}" class="btn" >
<f:ajax execute="@form" render=":questionStep2Form :questionStep1Group :questionStep2Group"/>
</h:commandLink>
</h:form>
</h:panelGroup>
<h:panelGroup id="questionStep2Group">
<h:form id="questionStep2Form" rendered="#{newPoll2.displayQuestionStep2}">
<h:commandLink value="cancel" action="#{newPoll2.questionStep2Cancelled()}" class="btn" >
<f:ajax execute="@form" render=":questionStep1Form :questionStep1Group :questionStep2Group" />
</h:commandLink>
</h:form>
</h:panelGroup>
</p:dialog>
</ui:define>
</ui:composition>
</h:body>
questionStep1Completed()とquestionStep2Cancelled()は、 rendered属性で使用されるブール値を切り替えるだけです。
問題はビューステートにあります。ページが最初に読み込まれると、[次へ] をクリックしても機能し、[キャンセル] リンクに置き換えられます。しかし、「キャンセル」リンクをクリックすると、「次へ」リンクに置き換えるために 2 回クリックする必要があります。最初のクリックでビュー ステートなしのリクエストが行われ、2 回目の (成功した) クリックでリクエストが行われたことがわかります。
この質問とこのリンクを見ました。ご覧のとおり、 render属性にフォーム ID を追加しましたが、まだ機能しません。何か案は?
ありがとう