1

我正在开发 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";
}

}

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

请提供想法和帮助

谢谢。

4

1 回答 1

0

如果您真的打算进行转发,就像您在问题中所做的那样,在呈现第二页时,第一页上提交的数据已经存在:请记住,转发是在同一个 HTTP 请求中完成的。因此,您最终需要的是保留后续 POST 请求的值。例如,您可以通过将信息存储在第二页上的隐藏字段中来做到这一点:

<h:inputHidden value="#{getDetails.locationID}" />

基本上就是这样。

如果您打算进行重定向,因此通过附加?faces-redirect=true到导航案例结果,您需要将该信息存储在 EL 闪存中,以便能够在接收页面中检索它:有两个请求需要完成。因此,将您的第一个 bean 的操作方法更改为以下内容:

public String action() {
    ...
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put("locationID", locationID);
    return "result?faces-redirect=true";
}

这样,在接收页面上,它将在闪存地图中可用,因此通过

#{flash.locationID}

在 EL 范围内和

(String)FacesContext.getCurrentInstance().getExternalContext()
                    .getFlash().get("locationID");

在 Java 代码中。

于 2013-10-09T12:05:28.700 回答