Search in sources :

Example 1 with Flash

use of javax.faces.context.Flash 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();
}
Also used : ExceptionQueuedEvent(javax.faces.event.ExceptionQueuedEvent) FacesContext(javax.faces.context.FacesContext) ViewExpiredException(javax.faces.application.ViewExpiredException) ExceptionQueuedEventContext(javax.faces.event.ExceptionQueuedEventContext) ContextNotActiveException(javax.enterprise.context.ContextNotActiveException) Flash(javax.faces.context.Flash) UIViewRoot(javax.faces.component.UIViewRoot) TestStage(org.apache.deltaspike.core.api.projectstage.TestStage)

Aggregations

ContextNotActiveException (javax.enterprise.context.ContextNotActiveException)1 ViewExpiredException (javax.faces.application.ViewExpiredException)1 UIViewRoot (javax.faces.component.UIViewRoot)1 FacesContext (javax.faces.context.FacesContext)1 Flash (javax.faces.context.Flash)1 ExceptionQueuedEvent (javax.faces.event.ExceptionQueuedEvent)1 ExceptionQueuedEventContext (javax.faces.event.ExceptionQueuedEventContext)1 TestStage (org.apache.deltaspike.core.api.projectstage.TestStage)1