JSF2:formajax操作生成另一个表单&x27;要丢失的视图状态

JSF2:formajax操作生成另一个表单&x27;要丢失的视图状态,ajax,forms,jsf,jsf-2,viewstate,Ajax,Forms,Jsf,Jsf 2,Viewstate,我有一个由两个表单组成的简单页面。它们不能同时显示(一个切换另一个)。代码如下: <h:body> <ui:composition template="/elements/templateWithMenu.xhtml"> <ui:define name="content"> <p:dialog id="question1DialogId" widgetVar="question1

我有一个由两个表单组成的简单页面。它们不能同时显示(一个切换另一个)。代码如下:

<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()只需切换渲染属性中使用的布尔值

问题在于视图状态。第一次加载页面时,单击“下一步”将起作用,并将替换为“取消”链接。但当我点击“取消”链接时,需要点击两次,才能将其替换为“下一个”链接。我可以看到,第一次单击发出没有视图状态的请求,第二次(成功)单击发出请求

我看到了问题和链接,如您所见,我在“渲染”属性中添加了表单ID,但它仍然不起作用。有什么想法吗


谢谢

您正在有条件地呈现表单本身,因此在准备ajax请求时,另一个表单在HTML DOM树中不可用。如果将表单内容包装到另一个
中,并将
呈现的
属性移动到那里,那么它应该可以工作。

{newPoll2}
是一个视图范围的bean,对吗?实际上会话范围是。我附加了一个调试器,只有在执行第二次单击时才会调用我的方法。好的,您确定在提交过程中实际评估的不是父级
呈现的
属性吗?如果这不是问题,那么尝试在
中创建另一个
,并将
呈现的
属性移到那里。@BalusC,你是上帝!添加另一个
有帮助。以下是工作代码:。只需确保您添加了一个正式答案,这样您就可以享受积分:)