如何将参数从RequestScoped传递给ViewScoped bean

时间:2011-07-28 17:20:39

标签: jsf jsf-2

我有一个简单的表单,您可以输入String。提交表单时,用户将被重定向到另一个回显用户输入的页面。第一页使用RequestScoped bean,而第二页使用ViewScoped bean。

第一页:

    <h:form>
        Type a String: <h:inputText value="#{requestScopedBean.property}"></h:inputText>
        <h:commandButton value="To View" action="#{requestScopedBean.toViewScopedBean}">
            <f:setPropertyActionListener target="#{viewScopedBean.property}" value="#{requestScopedBean.property}" />
            <f:ajax execute="@form" />
        </h:commandButton>
    </h:form>

第二页:

    This is the property passed by the requestScoped bean: <h:outputText value="#{viewScopedBean.property}"></h:outputText><br/>
    This is the property created in the PostConstruct: <h:outputText value="#{viewScopedBean.otherProperty}"></h:outputText>

我明白为什么它不起作用。提交表单后,viewScopedBean.property将设置为正确的值,但之后我们会切换到另一个视图,因此会创建一个新的ViewScopedBean。这就是请求中的值丢失的原因。

如何将参数从第一页传递到第二页而不更改bean的范围

1 个答案:

答案 0 :(得分:0)

或者,您可以在触发requestScopedBean操作时将字符串放在请求图上

public String toViewScopedBean(String string){
    Map<String,Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    requestMap.put("StringKey", string);
    return "toViewScopedBean";
}

然后从valueScopedBean

中检索值
public String getProperty(){
    Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    return (String) requestMap.get("StringKey");
}