Wir haben eine Anwendung, die JSF2 und Spring verwendet. Die Anwendung funktioniert ordnungsgemäß, wenn sie bereitgestellt wird. Aber das passiert, wenn ich die folgenden Schritte durchlaufe:
Es wurde versucht, sich über die zuvor geöffnete Anmeldeseite anzumelden, und die folgende Ausnahme wird angezeigt:
%Vor%Wenn ich auf die erste Login-Seite klicke und dann die Login-Daten eingebe, bricht die Anwendung nicht ab. Dies tritt nur auf, wenn ich versuche, die zuvor geladene Anmeldeseite mit der neu bereitgestellten Anwendung zu verwenden.
Weiß jemand die Antwort?
Dieser sollte als ViewExpiredException
geworfen werden. Es ist ein Bug, der sich in Mojarra 2.0.3 manifestiert und in Mojarra 2.1.0 behoben wurde. Siehe auch Problem 1762 (beachten Sie, dass Mojarra 2.1.0 funktioniert nicht auf Tomcat / Jetty, verwende mindestens Mojarra 2.1.1.
Grundsätzlich, wenn Mojarra die Ansicht nicht erstellen oder wiederherstellen kann, wird normalerweise eine Ausnahme mit ausreichendem Wert ausgegeben, aber aufgrund dieses Fehlers wurde später fälschlicherweise eine gültige Sicht im Code erwartet, die wiederum in IllegalArgumentException: null source
resultiert. Die mögliche echte Ursache wäre gewesen, dass die Ansicht einen einfachen XML Syntaxfehler enthält, wie zB ein fehlendes Tag oder einen defekten Attributwert, für den Mojarra normalerweise eine FaceletException
mit einer sehr detaillierten Nachricht geworfen hätte mit Zeilennummer und Position und so.
Um das ViewExpiredException
zu verhindern, müssten Sie die Seite mit einer GET-Anfrage aktualisieren, bevor Sie irgendwelche Aktionen ausführen. Wenn Sie eine Mojarra-Version verwenden, in der sich dieser Fehler nicht manifestiert (z. B. 2.0.2 oder älter oder 2.1.0 oder neuer), können Sie ihn mit einem <error-page>
in web.xml
für die bestimmte Ausnahme und Bereitstellung einer benutzerdefinierten Fehlerseite, auf der der Endbenutzer informiert wird, dass die Sitzung abgelaufen ist, sowie eine Verknüpfung zum ursprünglichen Anforderungs-URI.
Solange javax.faces.PARTIAL_STATE_SAVING auf false festgelegt ist, erhalten Sie die java.lang.IllegalArgumentException . Wenn Sie javax.faces.PARTIAL_STATE_SAVING auf true setzen (und Sie wissen, was Sie tun), erhalten Sie die "gute alte" javax.faces.application. ViewExpiredException zurück.
Dies sieht wie Ссылка
ausDas ist nicht in Mojarra 2.1.x behoben