2009-11-11 13 views
7

Wenn ich javax.faces.application.ViewExpiredException Ich möchte Benutzer zur Anmeldeseite senden.com.sun.faces.enableRestoreView11Kompatibilität was stattdessen in JSF 1.2 verwenden

web.xml

... 
    <context-param> 
     <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name> 
     <param-value>true</param-value> 
    </context-param> 
... 
<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/errors/sessionExpired.jsf</location> 
</error-page> 

sessionExpired.jsf

.... 
<c:redirect url="/index.jsf" /> 

aber enableRestoreView11Compatibility ist Methode, die in JSF 1.1 verwendet wurde, was Lösung für JSF 1.2?

Antwort

12

com.sun.faces.enableRestoreView11Compatibility ist eine JSF 1.2-Einstellung, die JSF 1.2 wie JSF 1.1 verhält.

com.sun.faces.enableRestoreView11Compatibility == true bedeutet "werfen Sie keine ViewExpiredException; stattdessen erstellen Sie einfach eine neue Ansicht, wenn die alte abgelaufen ist."

Die IBM notes auf dem JSF 1.1 Verhalten sagen:

Diese negative Verhalten haben kann, weil es sich um eine neue Ansicht ist, und Elemente, die in der Regel in der Ansicht, wie Zustand sind, sind nicht mehr da sein.

Der Standard JSF 1.2 Verhalten in the spec wie folgt definiert ist:

Wenn die Anforderung eine Postback ist, ViewHandler.restoreView() nennen, die FacesContext Instanz für die aktuelle Anforderung und der Ansicht Identifikator Geben, und eine Rückkehr UIViewRoot für die wiederhergestellte Ansicht. Wenn die Rückgabe von ViewHandler.restoreView() Null ist, werfen Sie eine ViewExpiredException mit einer entsprechenden Fehlermeldung. javax.faces.application.ViewExpiredException is a FacesException`, das ausgelöst werden muss, um der Anwendung zu signalisieren, dass die erwartete Ansicht für die Ansichtskennung nicht zurückgegeben wurde. Eine Anwendung kann basierend auf dieser Ausnahme eine Aktion ausführen.

Um ein ViewExpiredException geworfen, wenn die Ansicht abläuft, die com.sun.faces.enableRestoreView11Compatibility Parameter oder setzen Sie sich auf false entfernen.


Der com.sun Namespace lässt vermuten, dass der Parameter eine Sun/Mojarra ist und abgeleitete Implementierung spezifische Einstellung, so wird es wahrscheinlich nicht mit allen JSF-Implementierungen arbeiten.

+1

Ich dachte, dass ich ... verwenden kann, um Benutzer zur Anmeldeseite umzuleiten, aber ohne diesen Kompatibilitätsparameter funktioniert das nicht. Ich muss meinen PhaseListener schreiben, um diese Umleitung zu machen, oder vielleicht gibt es einen einfachen Weg. – aindl

+0

Ist diese Einstellung in JSF 2.2 noch gültig oder gibt es eine andere Option? –