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



我有一个简单的表单,您可以在其中输入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的作用域的情况下将参数从第一页传递到第二页 ?

或者,您可以在触发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");
}

相关内容

  • 没有找到相关文章

最新更新