Error-page não funciona com JSF

10 respostas
A

Olá :lol:

configurei a página de erro no web.xml desta forma

<error-page>  
       <exception-type>java.lang.Throwable</exception-type>    
       <location>/error.jsp</location>  
    </error-page>  

     <error-page>                        
       <error-code>500</error-code>  
       <location>/error.jsp</location>  
    </error-page>  
 
    <error-page>                        
       <error-code>404</error-code>  
       <location>/error.jsp</location>  
    </error-page>

porém, com jsf, ao ocorrer um erro, a requisição não é redirecionada para a página error.jsp.
Isto também ocorre se eu faço

request.getRequestDispatcher("error.jsp").forward(request, response);

ou

response.sendError( 500 );

Agora, se eu redireciono com sendRedirect, assim:

response.sendRedirect( "error.jsp" );

funciona normalmente.

Eu não entendi nada… então, gostaria da ajuda dos + experientes:

Como é que vcs tratam erro usando Jsf?

Abraços!

10 Respostas

F

Oi Anastasia, eu estou tento o mesmo problema, quando crio uma pagina sem jsf tags funciona normalmente, porem quando tento colocar jsf tags ela para de funcionar. Você ja encontrou uma solução para o seu problema ? Caso sim, me escreve a solução por favor.

Obrigado antecipadamente pela ajuda,
Fabio Botelho

nessa_uepa

É, só consegui aqui quando a página de erro não tem tags JSF ou facelets.
=s

Será que tem como usar isso com JSF e/ou Facelets na página de erro mapeada?

gomesrod

Que estranho, aqui funciona normalmente inclusive com páginas Jsf.

Só tem uma coisa que vimos que não dá certo: é quando usamos algum mecanismo de template, como o Tiles. Nesse caso, quando acontece erro na página do “corpo” ele é tratado pelo próprio mecanismo de template que manda uma tela de erro dele mesmo.

O que exatamente acontece no caso de vocês ?

nessa_uepa

O que acontece, é que quando você mapeia no web.xml, quando ocorre o erro, ele envia para a página mapeada, mas não é o JSF que está controlando a navegação nesse caso, então ele não consegue traduzir as tags JSF.
É o mesmo problema de mapear a página inicial no web.xml.
Por isso você mapeia a página forward.jsp ou algo do tipo como página inicial no web.xml, que dá um forward pra página JSF inicial verdadeira.
É o mesmo caso aqui.
Mapeie o erro no web.xml para um página erro_redireciona.jsp por exemplo que dê um forward pra verdadeira página de erro, esta sim que pode conter tags JSF, facelets e o diabo a quatro :stuck_out_tongue:

Ex da página redireciona_erro:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:forward page="erro.jsf"/>

:wink:

nessa_uepa

gomesrod:
Que estranho, aqui funciona normalmente inclusive com páginas Jsf.

Só tem uma coisa que vimos que não dá certo: é quando usamos algum mecanismo de template, como o Tiles. Nesse caso, quando acontece erro na página do “corpo” ele é tratado pelo próprio mecanismo de template que manda uma tela de erro dele mesmo.

O que exatamente acontece no caso de vocês ?

No seu caso funcionou a página de erro com tags JSF NA PÁGINA DE ERRO e sem fazer esse esqueminha que eu falei?

gomesrod

Ou talvez eu não tenha entendido direito a pergunta :oops:
Não utilizei tags Jsf na página de erro, pensei que se tratasse de fazer o tratamento de erros que aconteceram na página JSF, mas sem necessariamente usar Faces na error.jsp - ou seja, é um JSP “normal”

G

bom … eu trato os erros com strings …

meus metodos retornan uma string … “ok” ou “erro” …
e eu configuro normalmente nas minhas regras de navegação … por exemplo

<navigation-rule>
        <from-view-id>/login.jsp</from-view-id>
        <navigation-case>
            <from-outcome>ok</from-outcome>
            <to-view-id>/index.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>erro</from-outcome>
            <to-view-id>/login.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
T

pensando mais simples possível, vc pode dar um catch nas excessões de mais alto nível no MB, e retornar uma string “error”, por exemplo, como o guimoz falou…

gomesrod

O problema é que cedo ou tarde elas vão escapar hehe

E na verdade a pergunta não era sobre como tratar erros no JSF… aliás, como vc pode ver acima eu também entendi errado no começo. O que “tá pegando” é criar uma página de erro usando Faces.

G

mas entao … vc trata ela com strings, redireciona pra uma mesma pagina error.jsp … e monta ela com as tags

<h:messages> ou <h:message> usando um .properties

Criado 17 de setembro de 2008
Ultima resposta 19 de jan. de 2009
Respostas 10
Participantes 6