我正在研究JSF2.0项目,我需要从之前的屏幕获取支持bean的值我在下面解释了
我的第一个屏幕
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
>
<h:body>
<h:form>
<h:outputText value="LocationID" />
<h:inputText value="#{getDetails.locationID}"/>
<h:commandButton value="Add OS" action="#{getDetails.addOSDetails}"/>
</h:form>
</h:body>
</html>
调用commandButton时的支持bean
@ManagedBean(name="getDetails")
@RequestScoped
public class GetDetailsBean {
private String locationID;
public String getLocationID() {
return locationID;
}
public void setLocationID(String locationID) {
this.locationID = locationID;
}
public String addOSDetails(){
return "/app_pages/addOS";
}
}
我的第二个屏幕是addOS
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
>
<h:body>
<h:form>
<h:outputText value="Enter Value" />
<h:inputText value="#{addOS.addValue}"/>
<h:commandButton value="Add OS" action="#{addOS.save}"/>
</h:form>
</h:body>
</html>
我希望在第一个屏幕中输入的LocationID在此支持bean中可用
@ManagedBean(name="addOS")
@RequestScoped
public class AddOS {
private String addValue;
public String getAddValue() {
return addValue;
}
public void setAddValue(String addValue) {
this.addValue = addValue;
}
public String save(){
return "app_pages/success";
}
}
我不希望在会话中设置值。可以使用。
请提出想法和帮助
感谢。
答案 0 :(得分:0)
如果你真的打算做前进,就像你在问题中所做的那样,第一页上提交的数据已经存在于第二页呈现时:记住,转发是在相同的HTTP请求。因此,您最终需要的是保留后续POST请求的值。例如,您可以通过将信息存储在第二页上的隐藏字段来执行此操作:
<h:inputHidden value="#{getDetails.locationID}" />
基本上就是这样。
如果您打算执行重定向,那么通过将?faces-redirect=true
附加到导航案例结果,您需要将该信息存储在EL闪存中,以便能够在收件人中检索它page:有两个请求要完成。因此,将您的第一个bean的操作方法更改为以下内容:
public String action() {
...
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("locationID", locationID);
return "result?faces-redirect=true";
}
这种方式在接收页面上,它将在flash地图中提供,因此可以通过
获得#{flash.locationID}
EL范围内的和
(String)FacesContext.getCurrentInstance().getExternalContext()
.getFlash().get("locationID");
在Java代码中。