Warum sollte eine JSF ExceptionHandlerFactory anstelle der <error-page> -Umleitung verwendet werden?
Alle derExceptionHandlerFactory
Beispiele, auf die ich bisher gestoßen bin, leiten einen Benutzer zu einem umviewExpired.jsf
Seite für den Fall, dass aViewExpiredException
ist gefangen:
<code>public class ViewExpiredExceptionExceptionHandler extends ExceptionHandlerWrapper { private ExceptionHandler wrapped; public ViewExpiredExceptionExceptionHandler(ExceptionHandler wrapped) { this.wrapped = wrapped; } @Override public ExceptionHandler getWrapped() { return this.wrapped; } @Override public void handle() throws FacesException { for (Iterator<ExceptionQueuedEvent> i = getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();) { ExceptionQueuedEvent event = i.next(); ExceptionQueuedEventContext context = (ExceptionQueuedEventContext) event.getSource(); Throwable t = context.getException(); if (t instanceof ViewExpiredException) { ViewExpiredException vee = (ViewExpiredException) t; FacesContext facesContext = FacesContext.getCurrentInstance(); Map<String, Object> requestMap = facesContext.getExternalContext().getRequestMap(); NavigationHandler navigationHandler = facesContext.getApplication().getNavigationHandler(); try { // Push some useful stuff to the request scope for use in the page requestMap.put("currentViewId", vee.getViewId()); navigationHandler.handleNavigation(facesContext, null, "/viewExpired"); facesContext.renderResponse(); } finally { i.remove(); } } } // At this point, the queue will not contain any ViewExpiredEvents. Therefore, let the parent handle them. getWrapped().handle(); } } </code>
Es scheint mir das folgende einfach zu seinweb.xml
Die Konfiguration ist grundsätzlich dieselbe und viel einfacher:
<code><error-page> <exception-type>javax.faces.application.ViewExpiredException</exception-type> <location>/viewExpired.jsf</location> </error-page> </code>
Dies wirft die Frage auf - warum sollte man eine verwenden?ExceptionHandlerFactory
?