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
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.