Quero pegar o facescontext apartir de um filtro que eu uso. Este filtro deve ver qual foi o request do usuário. Este maldito filtro não é JSF! Ou seja, chamadas no request para saber que url o usuário acessou não funcionam. Fui tentar acessar o contexto do JSF para pegar o request mas quem disse que funciona?! Ele vem nulo!
Após procurar na internet achei este lindo código:
[code]// You need an inner class to be able to call FacesContext.setCurrentInstance
// since it’s a protected method
private abstract static class InnerFacesContext extends FacesContext
{
protected static void setFacesContextAsCurrentInstance(FacesContext facesContext) {
FacesContext.setCurrentInstance(facesContext);
}
}
private FacesContext getFacesContext(ServletRequest request, ServletResponse response) {
// Try to get it first
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);
// Either set a private member servletContext = filterConfig.getServletContext();
// in you filter init() method or set it here like this:
// ServletContext servletContext = ((HttpServletRequest)request).getSession().getServletContext();
// Note that the above line would fail if you are using any other protocol than http
// Doesn’t set this instance as the current instance of FacesContext.getCurrentInstance
facesContext = contextFactory.getFacesContext(servletContext, request, response, lifecycle);
// Set using our inner class
InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);
// set a new viewRoot, otherwise context.getViewRoot returns null
UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, “yourOwnID”);
facesContext.setViewRoot(view);
return facesContext;
}[/code]
Utilidade: pegar o contexto do JSF… :roll:
Me desculpem aos fãs do JSF, mas isto pra mim é uma gambi que não tem tamanho! Eu só quero saber qual a url do usuário! Porque request.getRequestURL() não funciona mais? Enfim, isto pra mim é ridiculo… não sei se o myfaces resolve este problema, se resolver vou tentar implantá-lo aqui. Já to cansado deste lixo.