我们正在使用JSF 2.0。实际上,我们正在从JSF 1.2迁移到JSF 2.0。
我在mainPage.xhtml
上有一个表单,其中我们通过<ui:include>
标记包含3个表单。
mainPage.xhtml
页面如下所示,
<c:if test="#{myManagedBean.stepRender eq 'firstPage'}">
<ui:include src="/public/firstPage.xhtml"/>
</c:if>
<c:if test="#{myManagedBean.stepRender eq 'secondPage'}">
<ui:include src="/public/secondPage.xhtml"/>
</c:if>
<c:if test="#{myManagedBean.stepRender eq 'thirdPage'}">
<ui:include src="/public/thirdPage.xhtml"/>
</c:if>
firstPage.xhtml
有几个输入字段,一个<h:commandButton>
有action="myManagedBean.continueStepOne"
。
secondPage.xhtml
有几个输入字段,一个<h:commandButton>
有action="myManagedBean.continueStepTwo"
。
thirdPage.xhtml
还有一些输入字段和一个<h:commandButton>
action="myManagedBean.continueStepThree"
。
我只为所有包含的页面和mainPage.xhtml
页面使用了一个bean。 bean是请求范围的。
bean类的代码
public String continueStepOneAction(){
== validation logic ==
stepRender="secondPage";
return "mainPage";
}
public String continueStepTwoAction(){
== validation logic ==
stepRender="thirdPage";
return "mainPage";
}
最初,当我向mainPage.xhtml
发送请求时,根据stepRender
值,它会包含一个最初为firstPage.xhtml
的特定页面。
如果我们输入数据并单击命令按钮,则会调用continueStepOne
操作。验证成功后,stepRender
值将更改。如果它等于secondPage
,则会包含secondPage.xhtml
页面。等等thirdPage
。
问题是,从firstPage
到secondPage
方法调用和导航工作正常,但在secondPage
中,当我们点击命令按钮时,它只会调用myManagedBean
的构造函数,它没有调用bean中的continueStepThreeAction()
方法。它会导航到firstPage.xhtml
,因为stepRender
值默认为firstPage
。
我无法理解问题出在哪里。我该如何解决?
答案 0 :(得分:0)
是请求范围内的托管bean吗?尝试通过将其声明为会话范围bean来推送到会话范围。