На этом этапе сессия еще не полностью завершена. Только когда метод слушателя завершается, сеанс помещается в контекст и доступен request.getSession()
, так как getSessionMap()
JSF используется под прикрытием.
Вместо этого вы должны извлечь сеанс из аргумента event
и использовать его метод setAttribute()
. JSF просто ищет и сохраняет управляемые bean-объекты сессионной области и не будет создавать новый, если он уже есть.
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setAttribute("mySessionBean", new MySessionBean());
}
Обратите внимание, что я удалил лишнюю проверку нуля, так как в этот момент невозможно , что сессионный компонент уже существует.
Не связанный с конкретной проблемой, вы фактически никогда не должны полагаться на то, что FacesContext
присутствует в реализации, которая не управляется JSF. Вполне возможно, что сеанс может быть создан во время не-JSF-запроса.