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