在 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?

HttpSessionListener的用法

2.HttpSessionListener接口来实现网站在线人数的统计

HttpSessionListener中是否可以使用面部上下文?

使用HttpSessionListener接口监听Session的创建和失效