Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 通过会话创建将数据存储到会话中_Session_Jsf 2_Listener - Fatal编程技术网

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

Session 通过会话创建将数据存储到会话中,session,jsf-2,listener,Session,Jsf 2,Listener,我需要将一些数据存储到用户会话中。通常我会使用getSessionMap().put()来解决这个问题。我的问题是,我需要在sessionListener的sessionCreated()-void中执行此操作,但此时FacesContext仍然为空。因此,下面的代码生成一个NullPointerException @Override public void sessionCreated(HttpSessionEvent arg0) { FacesContext.

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

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("data", "something");
    }
是否有其他方法将数据存储到会话中,或者可以手动初始化FacesContext的实例?不幸的是,我对jsf生命周期知之甚少


谢谢你的帮助

您似乎完全忽略了一个事实,即JSF只是“普通”Servlet API上的一个大抽象层,而
ExternalContext
(请花所有时间仔细阅读其内容,包括)只是委托给“普通”Servlet API中可用的类/方法

在您的特定情况下,当您在Servlet API(而不是Portlet API)之上使用JSF时,
ExternalContext\getSessionMap()
仅仅是/。猜猜看,
HttpSession
位于
HttpSessionListener
中,可通过
HttpSessionEvent
参数随时获取

@Override
public void sessionCreated(HttpSessionEvent event) {
    event.getSession().setAttribute("data", "something");
}

然后,可以通过任何JSF支持bean中的
getSessionMap().get(“data”)
,或者通过任何JSF支持bean中的
@ManagedProperty(“{data}”)
,或者通过JSF页面中EL中的
{data}
,来获取这些信息。

您似乎完全忽略了一个事实,即JSF只是“平原”上的一个大抽象层Servlet API和
ExternalContext
(请花所有时间仔细阅读其内容,包括)仅委托给“普通”Servlet API中可用的类/方法

在您的特定情况下,当您在Servlet API(而不是Portlet API)之上使用JSF时,
ExternalContext\getSessionMap()
仅仅是/。猜猜看,
HttpSession
位于
HttpSessionListener
中,可通过
HttpSessionEvent
参数随时获取

@Override
public void sessionCreated(HttpSessionEvent event) {
    event.getSession().setAttribute("data", "something");
}
然后,可以通过任何JSF支持bean中的
getSessionMap().get(“data”)
,或通过任何JSF支持bean中的
@ManagedProperty(“{data}”)
,或仅通过JSF页面中EL中的
{data}
来获取此信息