我有一个简单的表单,您可以输入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的范围?
答案 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");
}