{
continue;
}
FacesContext facesContext = exceptionQueuedEventContext.getContext();
Flash flash = facesContext.getExternalContext().getFlash();
if (throwable instanceof ViewExpiredException)
{
viewId = ((ViewExpiredException) throwable).getViewId();
}
else if (throwable instanceof ContextNotActiveException)
{
//the error page uses a cdi scope which isn't active as well
//(it's recorded below - see flash.put(throwable.getClass().getName(), throwable);)
if (flash.containsKey(ContextNotActiveException.class.getName()))
{
//TODO show it in case of project-stage development
break;
}
if (facesContext.getViewRoot() != null)
{
viewId = facesContext.getViewRoot().getViewId();
}
else
{
viewId = BeanProvider.getContextualReference(ViewConfigResolver.class)
//has to return a value otherwise this handler wouldn't be active
.getDefaultErrorViewConfigDescriptor().getViewId();
}
}
if (viewId != null)
{
UIViewRoot uiViewRoot = facesContext.getApplication().getViewHandler().createView(facesContext, viewId);
if (uiViewRoot == null)
{
continue;
}
if (facesContext.isProjectStage(javax.faces.application.ProjectStage.Development) ||
ProjectStageProducer.getInstance().getProjectStage() == ProjectStage.Development ||
ProjectStageProducer.getInstance().getProjectStage() instanceof TestStage)
{
throwable.printStackTrace();
}
facesContext.setViewRoot(uiViewRoot);
exceptionQueuedEventIterator.remove();
//record the current exception -> to check it at the next call or to use it on the error-page
flash.put(throwable.getClass().getName(), throwable);
flash.keep(throwable.getClass().getName());
this.viewNavigationHandler.navigateTo(DefaultErrorView.class);
break;
}