通过会话创建将数据存储到会话中

时间:2013-08-22 07:59:32

标签: session jsf-2 listener

我需要将一些数据存储到用户会话中。通常我会使用getSessionMap().put()来解决这个问题。我的问题是,我需要在sessionCreated() - 我的sessionListener的void中执行此操作,但此时FacesContext仍为null。所以下面的代码会生成NullPointerException。

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("data", "something");
    }

是否有其他方法可以将数据存储到会话中,还是可以手动初始化FacesContext实例?不幸的是,我对jsf生命周期知之甚少。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你好像完全错过了这样一个事实:JSF只是“普通”Servlet API上的一个大抽象层,ExternalContext(请花时间仔细阅读javadoc,包括{ {3}})仅委托“普通”Servlet API中可用的类/方法。

在您的特定情况下,当您在Servlet API(而不是Portlet API)之上使用JSF时,ExternalContext#getSessionMap()仅仅是method descriptions / HttpSession#setAttribute()的外观。猜猜HttpSession HttpSessionListenerHttpSessionEvent论证随时可用的内容@Override public void sessionCreated(HttpSessionEvent event) { event.getSession().setAttribute("data", "something"); }

getSessionMap().get("data")

然后由@ManagedProperty("#{data}")#{data}在任何JSF支持bean中提供,或者只在JSF页面中由EL中的{{1}}提供。