【问题标题】:retaining values across screen sin JSF2.0在 JSF2.0 中跨屏幕保留值
【发布时间】:2013-10-09 11:27:45
【问题描述】:

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

}

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

请给点意见和帮助

谢谢。

【问题讨论】:

  • 如果你想让一个属性在多个视图中使用,那么它应该存储在一个 SessionScope 中

标签: session jsf-2


【解决方案1】:

如果您真的打算转发,就像您在问题中所做的那样,在第二页呈现时,第一页上提交的数据已经存在:请记住,转发是在相同的 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 地图中可用,因此由

#{flash.locationID}

在 EL 范围内和

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

在 Java 代码中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多