use of javax.faces.application.ViewExpiredException in project deltaspike by apache.
the class DefaultErrorViewAwareExceptionHandlerWrapper method handle.
@Override
public void handle() throws FacesException {
lazyInit();
Iterator<ExceptionQueuedEvent> exceptionQueuedEventIterator = getUnhandledExceptionQueuedEvents().iterator();
while (exceptionQueuedEventIterator.hasNext()) {
ExceptionQueuedEventContext exceptionQueuedEventContext = (ExceptionQueuedEventContext) exceptionQueuedEventIterator.next().getSource();
@SuppressWarnings({ "ThrowableResultOfMethodCallIgnored" }) Throwable throwable = exceptionQueuedEventContext.getException();
String viewId = null;
if (!isExceptionToHandle(throwable)) {
continue;
}
FacesContext facesContext = exceptionQueuedEventContext.getContext();
Flash flash = facesContext.getExternalContext().getFlash();
if (throwable instanceof ViewExpiredException) {
viewId = ((ViewExpiredException) throwable).getViewId();
} else if (throwable instanceof ContextNotActiveException) {
// (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).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;
}
}
this.wrapped.handle();
}
Aggregations