一个包含多个<ui:include>和一个请求范围bean的多步向导表单,如何继续下一步?</ui:include>

时间:2012-02-14 11:55:11

标签: jsf-2

我们正在使用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

问题是,从firstPagesecondPage方法调用和导航工作正常,但在secondPage中,当我们点击命令按钮时,它只会调用myManagedBean的构造函数,它没有调用bean中的continueStepThreeAction()方法。它会导航到firstPage.xhtml,因为stepRender值默认为firstPage

我无法理解问题出在哪里。我该如何解决?

1 个答案:

答案 0 :(得分:0)

是请求范围内的托管bean吗?尝试通过将其声明为会话范围bean来推送到会话范围。