Implementando página de erro com JSF

Samuel Martins Delfim 26 de agosto de 2009 2
Implementando página de erro com JSF

Algumas pessoas estão tendo dúvidas sobre como implementar uma página de erro com JSF, e resolvi então criar este post para explicar uma maneira de implementar.

Para se realizar o redirecionamento pode se utilizar o ActionListener do JSF. Segue abaixo um exemplo de implementação da classe deste ActionListener:

/**
 * Classe responsável por tratar erros inesperados do sistema.
 *
 * @author Samuel Delfim
 *
 */
public class ExceptionHandler extends ActionListenerImpl {

	@Override
	public void processAction(ActionEvent event) {
		// Obtem o contexto JSF
		FacesContext context = FacesContext.getCurrentInstance();

		try {
			// Executa o método da classe Pai
			super.processAction(event);

		} catch (Exception e) {

			// Se ocorrer um erro inesperado, exibe a mensagem abaixo
			context.addMessage(null, new FacesMessage(
				FacesMessage.SEVERITY_FATAL, e.getMessage(), null));

			// Redireciona para a pagina com o mapeamento 'erro' no faces-config.
			context.getApplication().getNavigationHandler().handleNavigation(
					context, null, "erro");
		}
	}
}

Pode-se, por exemplo, na classe acima realizar tratamentos diferentes para cada tipo de exceção.

Para aplicar o Listener em uma aplicação jsf deve ser colocado o seguinte trecho dentro do arquivo faces-config.xml:

	
	com.thinkworks.handler.exception.ExceptionHandler
	com.sun.facelets.FaceletViewHandler

		pt_BR
		pt_BR
		es_AR

	com.thinkworks.mensagens.Mensagens

O trecho a ser copiado se refere à tage deve ser aplicado ao view-handler específico. Neste caso, o ViewHandler utilizado é o do projeto facelets que está sendo utilizado no projeto em questão.

Também no arquivo faces-config.xml deve ser realizado o mapeamento da página de erro.
Segue abaixo um exemplo de mapeamento de página de erro:

		erro
		/pages/erro/paginaErro.xhtml

É isto aí pessoal. Espero ter ajudado…

2 Comentários »

  1. Jose 11 de maio de 2010 de 11:25 am - Reply

    Olá Samuel,

    implementei minha página de erro conforme o exemplo desse artigo, mas percebi que quando utilizo, por exemplo, um botão com actionListener , quando dá erro, o erro não é tratado pelo meu ActionListener. Eu posso ter implementado errado?

    • admin 12 de maio de 2010 de 6:51 pm - Reply

      Realmente Jose,

      Este Handler não serviria para exceções lançadas de Action Listeners. Devia ter explicado isto no post. Se conseguir achar alguma solução centralizada de tratamento de erros para actionListeners e puder mandar seria de grande valia.

Deixe uma resposta »