我在我的应用程序中使用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 来实现这一点,因为所有这些都是具有会话的更大应用程序的一部分。
是否有替代方案呢?
答案 0 :(得分:0)
您可以通过控制器bean从视图访问sessionScoped bean:
<h:inputText value="#{sampleController.sampleBean.value}">
在控制器bean中添加此Managed-Property的getter / setter。
答案 1 :(得分:0)
您的会话范围bean应该实现Serializable接口才能正常工作,请参阅this