保留屏幕上的值sin JSF2.0

时间:2013-10-09 11:27:46

标签: session jsf-2

我正在研究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";
}

}

我不希望在会话中设置值。可以使用。

请提出想法和帮助

感谢。

1 个答案:

答案 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代码中。