Problema com Navegação em JSF usando o PrimeFaces e Erro de Outcome
Ao desenvolver uma aplicação JSF utilizando PrimeFaces, me deparei com um erro ao tentar implementar um botão para redirecionamento de páginas usando o componente <p:button>
.
<p:button id="errorButton" value="Voltar" outcome="index.xhtml"></p:button>
O objetivo era que o botão “Voltar” redirecionasse o usuário para a página index.xhtml
. No entanto, o redirecionamento não estava funcionando, resultando no seguinte erro:
JSF1073: javax.faces.FacesException obtido durante o processamento de RENDER_RESPONSE 6:
UIComponent-ClientId=, Message=Could not resolve NavigationCase for outcome: index.xhtml
Causa do Erro
O erro ocorreu porque o JSF não conseguiu resolver o caminho correto para o arquivo index.xhtml
. A mensagem de erro indicava que não foi possível encontrar um NavigationCase para o outcome index.xhtml
.
No código original, o botão foi implementado da seguinte maneira:
<p:button id="errorButton" value="Voltar" outcome="index.xhtml"></p:button>
A questão estava no fato de que o arquivo index.xhtml
não estava na pasta raiz do projeto (/webapp
), mas sim em um subdiretório chamado /pages/public
. Como resultado, o JSF não conseguiu localizar o arquivo usando o outcome relativo index.xhtml
, gerando o erro.
Estrutura do projeto:
Solução
Para resolver o problema, foi necessário especificar o caminho absoluto para o arquivo index.xhtml
. Ao invés de usar apenas o nome do arquivo, foi necessário definir o caminho completo a partir da pasta /webapp
.
A correção foi feita da seguinte forma:
<p:button id="errorButton" value="Voltar" outcome="/pages/public/index.xhtml"></p:button>
Esse tipo de erro é comum quando se trabalha com múltiplos diretórios para organizar as páginas de uma aplicação JSF. Para evitar esse problema no futuro:
- Sempre verifique o diretório onde os arquivos
.xhtml
estão localizados. - Use outcomes absolutos (
/caminho/para/pagina.xhtml
) ao trabalhar com subdiretórios para garantir que o JSF localize a página correta.