ViewExpiredException tratando

0 respostas
jsfprimefacesjava
Dayson_Rodrigues

estou tentando tratar essa Excetion ViewExpiredException mais não estou conseguindo.

package com.irmaosuspension.controleservico.jsf;

import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerFactory;

/**
 * Fabrica  de Exceção  do JSF
 * @author dayso
 *
 */
public class JsfExceptionHandleFacotry  extends ExceptionHandlerFactory{

	private ExceptionHandlerFactory factory;
	
	public JsfExceptionHandleFacotry(ExceptionHandlerFactory factory) {
		this.factory = factory;
	}
	
	@Override
	public ExceptionHandler getExceptionHandler() {

		return new JsfExceptionHandler(factory.getExceptionHandler());
	}

}

package com.irmaosuspension.controleservico.jsf;

import java.io.IOException;
import java.util.Iterator;

import javax.faces.FacesException;

import javax.faces.application.ViewExpiredException;

import javax.faces.context.ExceptionHandler;

import javax.faces.context.ExceptionHandlerWrapper;

import javax.faces.context.ExternalContext;

import javax.faces.context.FacesContext;

import javax.faces.event.ExceptionQueuedEvent;

import javax.faces.event.ExceptionQueuedEventContext;
import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.omnifaces.util.Messages;

import com.irmaosuspension.controleservico.util.NegocioException;

/**

  • Classe tratador de Exceções
  • @author dayso

*/
public class JsfExceptionHandler extends ExceptionHandlerWrapper {

private static Log log  = LogFactory.getLog(JsfExceptionHandler.class); //Regista os logs para essa classe.

private ExceptionHandler handler;

public JsfExceptionHandler(ExceptionHandler exceptionHandler) {
	this.handler = exceptionHandler;
}

/**
 * Método que retorna um tratador de Exceção Enpacotado
 */
@Override
public ExceptionHandler getWrapped() {

	return this.handler;
}

/**
 * Método que é chamado quando existir uma Exceção
 */
@Override
public void handle() throws FacesException {
	// Vai iterar nas Exceções Ocorridas.
	Iterator<ExceptionQueuedEvent> events = getHandledExceptionQueuedEvents().iterator();
	
	while (events.hasNext()) {
		ExceptionQueuedEvent event = events.next(); // pega o proximo eventos.
		ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource(); // Pega a origem da Exceção.

		Throwable exception = context.getException(); // pega a exceção de qualquer tipo..
		NegocioException negocioException = getNegocioException(exception);
		
		boolean handled = false;
		
		try{
			// Pego o Erro.
			if (exception instanceof ViewExpiredException) { // se o erro é deste tipo, redireciona para a pagina principal.
				handled = true;
				redirect("/");
			}else if (negocioException != null) { //se é de outro tipo mostra msg.
				handled = true;
				Messages.addGlobalError(negocioException.getMessage());
			}else{ //Se não conhece um erro direciona para essa.
				handled = true;
				log.error("Erro de sistema: " + exception.getMessage(), exception); //imprimi toda a pilha do erro da exceção do arquivo de log.
				redirect("/erro.xhtml");
			}
		}finally {
			if	(handled){
			events.remove(); //REMOVE O do iterador
			}
		}

	}
	getWrapped().handle(); 
}

private NegocioException getNegocioException(Throwable exception) {
	if (exception instanceof NegocioException) {
		return (NegocioException) exception; 
	} else if (exception.getCause() != null) {
		return getNegocioException(exception.getCause());
	}
	
	return null;
}

private void redirect(String page) {

	try {
			FacesContext facesContext = FacesContext.getCurrentInstance();
			ExternalContext externalContext = facesContext.getExternalContext();
			String contextPath = externalContext.getRequestContextPath();
			
			externalContext.redirect(contextPath + page);
			facesContext.responseComplete();
	} catch (IOException e) {
		throw new FacesException(e);
	}
}

}

faces-config

<?xml version="1.0" encoding="UTF-8"?>

<factory>
	<exception-handler-factory>com.irmaosuspension.controleservico.jsf.JsfExceptionHandleFacotry</exception-handler-factory>
</factory>
Criado 30 de março de 2017
Respostas 0
Participantes 1