我需要将一些数据存储到用户会话中。通常我会使用getSessionMap().put()
来解决这个问题。我的问题是,我需要在sessionCreated()
- 我的sessionListener的void中执行此操作,但此时FacesContext仍为null。所以下面的代码会生成NullPointerException。
@Override
public void sessionCreated(HttpSessionEvent arg0) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("data", "something");
}
是否有其他方法可以将数据存储到会话中,还是可以手动初始化FacesContext实例?不幸的是,我对jsf生命周期知之甚少。
感谢您的帮助!
答案 0 :(得分:1)
你好像完全错过了这样一个事实:JSF只是“普通”Servlet API上的一个大抽象层,ExternalContext
(请花时间仔细阅读javadoc,包括{ {3}})仅委托“普通”Servlet API中可用的类/方法。
在您的特定情况下,当您在Servlet API(而不是Portlet API)之上使用JSF时,ExternalContext#getSessionMap()
仅仅是method descriptions / HttpSession#setAttribute()
的外观。猜猜HttpSession
HttpSessionListener
在HttpSessionEvent
论证随时可用的内容@Override
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setAttribute("data", "something");
}
!
getSessionMap().get("data")
然后由@ManagedProperty("#{data}")
或#{data}
在任何JSF支持bean中提供,或者只在JSF页面中由EL中的{{1}}提供。