FacesContext#getCurrentInstance() returns null in Filter#doFilter()

Pravin Sonawane picture Pravin Sonawane · Jan 18, 2013 · Viewed 17.2k times · Source

Inside a

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

I wanted to get the session using

FacesContext.getCurrentInstance().getExternalContext().getSession(false);

But I realised that FacesContext.getCurrentInstance() returns null. I know that I can get the session using ((HttpServletRequest) req).getSession(false) instead, but my concrete question is: why is the faces context null in the doFilter() method?

I'm using MyFaces 1.1.

Answer

kolossus picture kolossus · Jan 18, 2013

FacesContext as an object is tied directly to the JSF request processing lifecycle and as a result is only available during a standard JSF (user-driven) request-response process. The actual object itself is stored in a thread that runs during the processing of a JSF request, vis-a-vis a ManagedBean.

But. BalusC has outlined some steps to get your hands on the object outside of the processing lifecycle here. :)