[RESOLVIDO]Recuperar FacesContext em Filter

Boa noite galera.

Como eu consigo recuperar o FacesContext em outra classe qualquer? Eu tentei FacesContext.getCurrentInstance() mas ele retorna null.
Estou tentando recuperar ele dentro de um Filter, no método doFilter.

Obrigado,

Cesar Pizolato

Não se é a melhor solução mas vamos lá.

No método init eu fiz assim:

public void init(FilterConfig config) throws ServletException { this.filterConfig = config; this.contextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); this.lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); this.lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); }

e no doFilter:

[code]public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
if (filterConfig == null)
return;

    facesContext = contextFactory.getFacesContext(filterConfig.getServletContext(), request, response, lifecycle);

    .......

}[/code]

Espero ter ajudado.

Guilherme, muito obrigado pela ajuda, mais ele retorna null, veja se errei algo:

[code]FilterConfig filterConfig;
FacesContextFactory contextFactory;
LifecycleFactory lifecycleFactory;
Lifecycle lifecycle;

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain fc) throws IOException, ServletException {

	try {

		fc.doFilter(request, response);

		if (filterConfig == null) {
			return;
		}

		FacesContext facesContext = contextFactory.getFacesContext(
				filterConfig.getServletContext(), request, response,
				lifecycle);

		System.out.println("ViewID: "
				+ facesContext.getViewRoot().getViewId());

	} catch (Exception e) {
		System.out.println("[ PersistenceSessionFilter ERROR ] "
				+ e.getMessage());
	}
}

@Override
public void init(FilterConfig config) throws ServletException {
	this.filterConfig = config;
	this.contextFactory = (FacesContextFactory) FactoryFinder
			.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
	this.lifecycleFactory = (LifecycleFactory) FactoryFinder
			.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
	this.lifecycle = lifecycleFactory
			.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
}

[/code]
Quando ele faz System.out.println("ViewID: "
+ facesContext.getViewRoot().getViewId()); da NullPointer.

Se eu fizer:

FacesContext fc = FacesContext.getCurrentInstance();

De qualquer lugar da aplicação, ele funcionar, menos do Filter, alguem sabe o pq? Como eu vou carregar do Filter então?

[quote=guilherme737]Não se é a melhor solução mas vamos lá.

No método init eu fiz assim:

public void init(FilterConfig config) throws ServletException { this.filterConfig = config; this.contextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); this.lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); this.lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); }

e no doFilter:

[code]public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
if (filterConfig == null)
return;

    facesContext = contextFactory.getFacesContext(filterConfig.getServletContext(), request, response, lifecycle);

    .......

}[/code]

Espero ter ajudado.
[/quote]
Resolvi de outra forma Guilherme, obrigado pela ajuda.

Postaí então, é sempre bom ter mais uma alternativa para a solução de um problema. :wink: