Tenho iniciado desenvolvimento com jsf, e estou estranhando um comportamento.
Qndo abro pela primeira vez pagina login.jsf ela ignora o primafaces.
Após efetuar o login corretamente, ele é direcionado para a pagina principal no qual
exibe os componentes primefaces tranquilo. Porém se eu voltar para a pagina de login ele
mostra os componentes visuais do primafaces corretamente. Devido já estar logado.
Ai vai um chute do que pode ser o problema.
Ve se no web.xml tem o padrão de url da Faces Servlet
acho que o codigo é mais ou menos assim
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Verifica se quando tu abre a página de login pela primeira vez aparece na url o /faces/
Se for esse o problema tu pode substituir o /faces/* por *.xhtml; *.jsp;
Algumas verificações adicionais que podem ser feitas:
As URLs quando você acessa a página de login pela 1a vez e quando acessa pela 2a vez são idênticas?
Pode ser que em uma delas não esteja passando pelo Servlet do faces.
Coloque mensagens de log nesses pontos:
[code] if (session.getAttribute(“autenticado”) != null
|| req.getRequestURI().endsWith(“login.jsf”)) {
// MENSAGEM DE LOG AQUI
chain.doFilter(request, response);
} else {
// MENSAGEM DE LOG AQUI
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("login.jsf");
} [/code]
Veja se em algum momento ele não passou pelo lugar que era esperado.
Estou com um problema mais ou menos semelhante, que eu postei logo abaixo no fórum.
Pelo que eu pude perceber, o problema seu é que o seu filtro fica sendo executado sempre a cada requisição que é feita na página. No caso do Prime, que usa o jQuery, essas requisições são constantes. E como você somente deixa passar se o filtro é executado corretamente, os componentes do prime não são carregados, pois não são executados porque o filtro o barrou.
a separação de pastas poderia resolver o problema - mas acho que aí você cairia no problema que eu estou…
Obrigado pela ajuda cara, olhei seu tópico e consegui resolver separando o login do restante da aplicação.
Fica a dica pra quem tiver o mesmo problema, separei o login da aplicacao com um folder “privado” sendo que o filtro
só será executado quando se referir a esse diretório… E é claro nao se esqueçam de mudar no xml.
Segue:
[code]
verificaUsuario
filtros.FiltroLogin
verificaUsuario
/privado/*
[/code]
Obrigado a todos pela força.
Abs