Jsf 2 HttpSessionListener中是否有faces上下文?
我试图在我的应用程序中从HttpSessionListener运行以下代码。但我看到会话id的不同输出。会话初始化侦听器在启动jsf应用程序时默认触发Jsf 2 HttpSessionListener中是否有faces上下文?,jsf-2,servlet-listeners,Jsf 2,Servlet Listeners,我试图在我的应用程序中从HttpSessionListener运行以下代码。但我看到会话id的不同输出。会话初始化侦听器在启动jsf应用程序时默认触发 @Override public void sessionCreated(HttpSessionEvent se) { FacesContext fc=FacesContext.getCurrentInstance(); System.out.println("session id01-->"+se.
@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。
第二个是打印空
为什么即使创建了会话,faces上下文仍将会话返回为null
问候,,
-Vissu Adusumalli.由于
fc.getExternalContext()
不会抛出NPE,因此FacesContext可用。为什么来自ServletContext
(外部上下文是ishat,而不是JSF)的会话为空是另一个问题。它可能还没有设置在创建新的HTTP会话时调用HttpSessionListener
。但是,faces上下文从中获取会话。如果会话刚刚创建,它可能仍然没有链接到当前请求。它不会抛出NPE,但我看不到faces上下文中的会话,即使会话已创建并且我在sessioncreated()方法中。那么?在sessioncreated方法中并不意味着它已经在servletcontext中设置好了。我的答案从你的题目回答了你的问题