【问题标题】: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 获取会话。如果会话刚刚创建,它可能仍未链接到当前请求。

标签: jsf-2 servlet-listeners


【解决方案1】:

由于 fc.getExternalContext() 不抛出 NPE,FacesContext 可用的。为什么来自ServletContext 的会话(即外部上下文是,而不是JSF 事物)为空是另一个问题。它可能还没有设置

【讨论】:

  • 它不会抛出 NPE,但即使创建了会话并且我在 sessioncreated() 方法中,我也看不到来自 Faces 上下文的会话
  • 所以?在 sessioncreated 方法中(看起来)并不意味着它已经在 servletcontext 中设置。我的回答从你的标题回答了你的问题
猜你喜欢
  • 1970-01-01
  • 2020-03-08
  • 2020-04-28
  • 2013-09-03
  • 2014-03-18
  • 2018-03-25
  • 1970-01-01
  • 2012-06-16
  • 2021-11-14
相关资源
最近更新 更多