Olá!

Infelizmente o tratamento de exceções no JSF (JavaServer Faces) não é tão fácil quanto no Struts, enquanto no Struts o tratamento é feito de forma declarativa no struts-config.xml(eu acho mais fácil tratar dessa forma), no JSF é programático, ou seja você escreve o código que trata a exception para mostrar a mensagem correta na página. Geralmente isso é feito diretamente no Managed Bean usando blocos try…catch.

Quando você espera uma exception é intuitivo colocar um bloco try..catch e escrever o código para mostrar uma mensagem na página. Mas e se der um NullpointerException ou alguma outra RuntimeException?

Tratar essas exceptions no JSF de forma genérica não é fácil. Eu consegui fazer isso criando uma classe herdando de ActionListenerImpl, sobreescrevendo o método processAction e incluindo uma chamada ao método processAction() da classe pai dentro de um bloco try…catch. Dentro desse catch é feito um addMessage() com a mensagem a ser mostrada e também é feito o redirecionamento para a página de erro.

Outro problema é que o FacesMessage não suporta a internacionalização de mensagens, por isso foi criada a I18nFacesMessage que implementa esse recurso.

O exemplo do JSF (JavaServer Faces) – Exception Handler pode baixado clicando aqui.

Esse projeto foi feito no Eclipse 3.3 Europa, basta utilizar o recurso de import dele para poder rodar ele.

Utilize o Tomcat 6.0.16.

Até mais,
Roberto

Share


3 comentários

  1. #
    Rafael Ponte
    novembro 18th, 2008 at 21:55

    Você tem razão, infelizmente JSF até a versão 1.2 não possui um Exception Handler, logo somos obrigados a implementar o nosso próprio handler.

    Existem várias maneiras de se resolver esse problema, eu, por exemplo, já me substitui o FacesServlet pelo meu próprio, o que funcionou bacana.

    Hoje em dia a melhor solução que vejo é implementando algum tipo de interceptor como um PhaseListener na fase INVOKE_APPLICATION ou AOP com Spring [caso utilize JSF integrado ao Spring].

    Parabéns pelo post, espero que não deixe de postar sobre JSF.
    Abraços.

    Responda a esse comentário
  2. #
    Welsson
    agosto 2nd, 2011 at 10:46

    O link acima do exemplo estar indisponível

    Responda a esse comentário

Deixe um comentário