Ответ 1
Как получить FacesContext в фильтре?
Вы не можете. FacesContext
создается FacesServlet
и поэтому доступен только в любом Java-коде, который обрабатывается FacesServlet
, который охватывает все артефакты JSF, такие как управляемые beans и фазовые прослушиватели. В статье показано, как вручную создать FacesContext
, но этот подход в конечном итоге бесполезен. FacesContext
- это просто абстракция всего, что уже доступно стандартным API-интерфейсом Servlet, например HttpServletRequest
, HttpSession
, ServletContext
и т.д. Просто используйте их прямо так же, как JSF делает "под капотами".
У вас есть 2 варианта:
-
Вместо этого используйте JSF
PhaseListener
. В зависимости от конкретного функционального требования, о котором вы ничего не говорили, это может быть довольно неуклюжие решения/обходные пути. -
Не используйте JSF-предоставленную возможность Flash-области, но сами доморощенные. Принцип довольно прост: установите cookie при первоначальном запросе, отправьте перенаправление, в перенаправленном запросе найдите cookie и, чтобы удалить его (чтобы он больше не появлялся при последующем запросе). Именно так работает JSF Flash scope под капотами. См. Также Установить уведомление как атрибут запроса, который должен отображаться после sendRedirect для конкретного примера.