JSF Probleme beim redirect im ExceptionHandler

stormqueen

Mitglied
Hallo,

ich habe mir einen eigenen ExceptionHandler zum behandeln von NullPointerExceptions geschrieben und eingebunden. Dieser soll beim Auftreten einer NullPointerException auf eine Fehlerseite weiterleiten. Hier der entsprechende Ausschnitt:

Java:
FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
nav.handleNavigation(fc, null, "error" );

Auf einer test.xhtml Seite wird nun eine Bean angesprochen:

Java:
<h:outputText value="#{requestTestBean.firstname}" />

In dem entsprechenden getter wird eine NullPointerException erzwungen:
Java:
Object x = null;
x.toString()

Der redirect für dieses kleine Beispiel funktioniert auch prima. Füge ich jedoch mehr Content auf der Seite ein (z.B. ein Menü mit vielen Einträgen und Icons) funktioniert der redirect nicht mehr und ich bekomme die Meldung: "response already committed".

Nun zu meiner Frage: Wieso ist der Response im ExceptionHandler bereits committed? Und wieso ist er das nicht wenn ich nur wenig Content auf der Seite habe? Gibt es vielleicht irgendeinen context-param oder ähnliches, der dieses verhindert? ???:L
 
Ich glaube du musst den Lebenszyklus von JSF "kurz" schließen d.h.

beim auftreten einer NPE

Java:
FacesContext.getCurrentInstance().renderResponse();

aufrufen. Damit werden alle restlichen Phasen des Lebenszyklus unterbrochen und direkt das Rendering (6.Phase -> RenderResponse) angestoßen!

Grüße
 
Ich bin zu dem Zeitpunkt wenn die NullPointerException in dem ExceptionHandler ankommt schon in der RenderResponse Phase. Das ist genau das Problem.

Tritt die Exception in einer vorherigen Phase auf (z.B. InvokeApplication) ist der redirect kein Problem.
 

Neue Themen


Zurück
Oben