在 HttpSessionListener 中是不是可以使用人脸上下文?
Posted
技术标签:
【中文标题】在 HttpSessionListener 中是不是可以使用人脸上下文?【英文标题】:Is faces context available in HttpSessionListener?在 HttpSessionListener 中是否可以使用人脸上下文? 【发布时间】:2019-02-10 16:40:48 【问题描述】:我正在尝试从 HttpSessionListener 在我的应用程序中运行以下代码。但我看到会话 id 的不同输出。默认情况下,当我启动我的 jsf 应用程序时会触发会话初始化侦听器。
@Override
public void sessionCreated(HttpSessionEvent se)
FacesContext fc=FacesContext.getCurrentInstance();
System.out.println("session id01-->"+se.getSession().getId());
HttpSession session= ((HttpServletRequest) fc.getExternalContext().getRequest()).getSession(false);
System.out.println("httpSessionId-->" + (session!=null?session.getId():""));
第一个 sysout 打印会话 ID。 第二个是打印 null。
为什么即使创建了会话,faces context 仍将会话返回为 null ?
问候, -Vissu Adusumalli。
【问题讨论】:
HttpSessionListener
在创建新的 HTTP 会话时被调用。然而,faces 上下文从the current request 获取会话。如果会话刚刚创建,它可能仍未链接到当前请求。
【参考方案1】:
由于 fc.getExternalContext()
不抛出 NPE,FacesContext 是可用的。为什么来自ServletContext
的会话(即外部上下文是,而不是JSF 事物)为空是另一个问题。它可能还没有设置
【讨论】:
它不会抛出 NPE,但即使创建了会话并且我在 sessioncreated() 方法中,我也看不到来自 Faces 上下文的会话 所以?在 sessioncreated 方法中(看起来)并不意味着它已经在 servletcontext 中设置。我的回答从你的标题回答了你的问题以上是关于在 HttpSessionListener 中是不是可以使用人脸上下文?的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb(十八):HttpSessionListener接口
如何使用 Spring 将依赖项注入 HttpSessionListener?
2.HttpSessionListener接口来实现网站在线人数的统计