package org.jboss.seam.jsf;
import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerFactory;
import javax.faces.context.FacesContext;
import org.jboss.seam.web.ExceptionFilter;
import com.sun.faces.application.ApplicationAssociate;
import com.sun.faces.context.AjaxExceptionHandlerImpl;
import com.sun.faces.context.ExceptionHandlerImpl;
/**
* Factory not to be used AjaxExceptionHandlerImpl class and
* always be an exception to be thrown by capturad ExceptionFilter
*
* @see AjaxExceptionHandlerImpl
* @see ExceptionFilter
* @author Tiago Peruzzo
*
*/
public class SeamExceptionHandlerFactory extends ExceptionHandlerFactory {
private ApplicationAssociate associate;
@Override
public ExceptionHandler getExceptionHandler() {
FacesContext fc = FacesContext.getCurrentInstance();
ApplicationAssociate associate = getAssociate(fc);
return new ExceptionHandlerImpl(((associate != null) ? associate.isErrorPagePresent() : Boolean.TRUE));
}
// --------------------------------------------------------- Private Methods
private ApplicationAssociate getAssociate(FacesContext ctx) {
if (associate == null) {
associate = ApplicationAssociate.getCurrentInstance();
if (associate == null) {
associate = ApplicationAssociate.getInstance(ctx.getExternalContext());
}
}
return associate;
}
}