FacesContext.getCurrentInstance() is null, como iniciar o contexto no código java?

Olá, você conseguiu resolver esse problema? Estou com um parecido aqui… Caso tenha conseguido pode me passar a solução?
Obrigado.

Quem inicia o Context é o próprio JSF quando um ManagedBean é acessado…

Se ele estiver nulo é pq não há contexto e com isso não razão para obter o mesmo.

Você não pode armazenar o que precisa na sessão Http? Assim a informação ficaria disponível no filtro, antes do Faces começar o trabalho dele.

Vou postar meu código que faço isso junto com as partes desnecessarias pois estou sem tempo.

Depois voces usam a parte que precisam.

package br.com.web.tecea.filter;

import java.io.IOException;

import javax.faces.FactoryFinder;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.lifecycle.LifecycleFactory;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.web.tecea.handler.UsuarioHandler;
import br.com.web.tecea.model.usuario.NivelAcesso;
import br.com.web.tecea.util.FacesUtil;

public class PerfilFilter implements Filter {
	public static String context;
	private FilterConfig config;
	private ServletContext servletContext;

	public void destroy() {

	}

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain arg2) throws IOException, ServletException {

		HttpServletRequest hreq = (HttpServletRequest) req;
		String url = hreq.getRequestURL().toString();

		UsuarioHandler userHandler = (UsuarioHandler) FacesUtil.getValue(
				getFacesContext(req, res), null, "usuarioHandler");
		NivelAcesso nivel = userHandler.getNivelAcesso();
		if (userHandler.isLoged())
			for (String perm : nivel.getObservacao().split(";"))
				if (url.contains(perm)) {
					arg2.doFilter(req, res);
					return;
				}

		String context = config.getServletContext().getContextPath();
		redirect((HttpServletResponse) res, context + "/s-index.jsf");

	}

	private void redirect(HttpServletResponse res, String page)
			throws IOException {
		res.sendRedirect(page);
	}

	public void init(FilterConfig arg0) throws ServletException {
		config = arg0;
		servletContext = arg0.getServletContext();
		context = config.getServletContext().getContextPath();
	}

	private abstract static class InnerFacesContext extends FacesContext {
		protected static void setFacesContextAsCurrentInstance(
				FacesContext facesContext) {
			FacesContext.setCurrentInstance(facesContext);
		}
	}

	private FacesContext getFacesContext(ServletRequest request,
			ServletResponse response) {

		FacesContext facesContext = FacesContext.getCurrentInstance();
		if (facesContext != null)
			return facesContext;

		FacesContextFactory contextFactory = (FacesContextFactory) FactoryFinder
				.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
		LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder
				.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
		Lifecycle lifecycle = lifecycleFactory
				.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);

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

		InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);

		UIViewRoot view = facesContext.getApplication().getViewHandler()
				.createView(facesContext, "/Tecea/");
		facesContext.setViewRoot(view);

		return facesContext;
	}
}

Olá Pessoal,

A pouco tempo entrei em um projeto que usa JSF com xhtml no servidor OC4J. Não sabia JSF e aprendi no uso.
O projeto tem alguns necessidades, uma delas é o teste de acesso via AD (Active Directory) do Windows e se não tiver no AD ele abre a tela de login.

Ao acessar um página diretamente pela URL ela carrega normalmente e inicia o contexto (FacesContext.getCurrentInstance() != null). Quando faço um acesso via java, para obter o contexto, ele ainda não foi iniciado e é null. No web.xml tenho um filtro que chama o código para o acesso ao AD que encaminha para a tela de login ou para a tela princilpal. Com o uso do AD preciso acessar algo no código java iniciado pelo contexto sem chamar páginas.

Como posso iniciar o contexto do JSF para que o objeto FacesContext.getCurrentInstance() seja diferente de null sem chamar páginas (URL).

Agradeço desde já.