在JSF页面中访问SessionScoped Beans

时间:2013-09-20 13:14:44

标签: session jsf-2 managed-bean facescontext

我在我的应用程序中使用SessionScoped Managed Beans:

@ManagedBean
@SessionScoped
public class SampleBean{

private String value;

//getters and setters

}

我有我的控制器:

@ManagedBean
@SessionScoped
public class SampleController{

@ManagedProperty(value = "#{sampleBean}")
private SampleBean sampleBean;

public String showConfirm() {

return "confirm";

}

public String showComplete() {

return "complete";

}

//getters and setters
}

逻辑是,我有一个启动页面,我在其中输入值。然后它进入确认页面,然后最终进入完整页面。我必须在其余页面中显示在启动页面中输入的数据。

启动页面如下:

startup.xhtml

<h:inputText value="#{sampleBean.value}">
<h:commandLink value="Confirm"  action="#{sampleController.showConfirm()}">

在确认页面中,我想显示此数据。

confirm.xhtml

<h:outputFormat value="#{sampleBean.value}">

但是,我没有在此处显示任何值。 我尝试将这些值放入showConfirm()方法的sessionMap中。

public String showConfirm() {

FacesContext context = FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("sampleBean", sampleBean);

return "confirm";

}

但是,我也无法在confirm.xhtml中查看这些值。

仅当我使用<h:outputFormat value="#{sessionScope.sampleBean.value}">时,才会显示值。 另外,我想使用 SessionScope 来实现这一点,因为所有这些都是具有会话的更大应用程序的一部分。 是否有替代方案呢?

2 个答案:

答案 0 :(得分:0)

您可以通过控制器bean从视图访问sessionScoped bean:

<h:inputText value="#{sampleController.sampleBean.value}">

在控制器bean中添加此Managed-Property的getter / setter。

答案 1 :(得分:0)

您的会话范围bean应该实现Serializable接口才能正常工作,请参阅this