JSF - RichFaces - So wissen Sie, ob die Sitzung zeitlich festgelegt ist (auf den Kunden)
Frage
Ich entwickle die Anwendung mit JSF-RichFaces.
Die Anwendung verfügt über eine Standard -Anmeldeseite, Sitzungsverwaltung und die Sitzungszeit von 15 Minuten.
Eine der Anforderungen ist, wenn die Sitzung abläuft und der Benutzer auf eine der Links klickt, muss ich ein Popup anzeigen (anstatt sich auf eine Anmeldeseite anzeigen), in der "Ihre Sitzung abgelaufen ist, bitte melden Sie sich erneut an."
Wenn es sich um einen einzelnen Link handelt, kann ich mit A4J überprüfen, ob die Sitzung abgelaufen ist oder nicht. Aber in meinem Fall muss ich die "Sitzungs -Out" -Amarm für jeden Link und jede Taste anzeigen.
Alle Hinweise darauf werden mir helfen, vorwärts zu gehen.
Danke im Voraus.
Lösung
Wenn das Timeout der Sitzung 15 Minuten beträgt, können Sie einfach einen JavaScript -Anruf festlegen (mithilfe von Verwendung setTimeout
Methode) mit einem Popup. Wenn der Benutzer auf einen Link klickt, wird der JavaScript -Aufruf zurückgesetzt, sodass das Popup nur angezeigt wird, wenn der Benutzer mindestens 15 Minuten lang eine Seite bleibt.
Sie können mit so etwas versuchen:
<a4j:outputPanel ajaxRendered="true">
<script type="text/javascript">
setTimeout("Richfaces.showModalPanel('xxx');", 900000);
</script>
</a4j:outputPanel>
Erklärungen:
Wir wickeln den JavaScript -Code in a <a4j:outputPanel>
Komponente mit a ajaxRendered
Attribut festgelegt auf true
. Auf diese Weise wird das JavaScript -Timeout auch dann zurückgesetzt, wenn der Benutzer auf einen AJAX -Link klickt. Dann stellten wir eine Zeitüberschreitung auf 15 Minuten (900000 Millisekunden) ein, bis ein Modalpanel angezeigt wird.
Ich schlage vor, dass Sie diesen Code (und das Modalpanel) bei Verwendung in eine Vorlage einfügen Facelets. Diese Vorlage wird dann für jede Seite Ihrer Anwendung verwendet ...
Andere Tipps
RichFaces bietet eine zusätzliche Möglichkeit, Timeouts (ViewexpiredException) auf der Client -Seite zu fangen.
Fügen Sie zunächst den folgenden Code in Ihr web.xml hinzu:
<context-param>
<param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name>
<param-value>true</param-value>
</context-param>
Fügen Sie schließlich ein JavaScript auf der Seite hinzu:
<script type="text/javascript">
//<![CDATA[
A4J.AJAX.onError = function(req, status, message) {
*window.location.reload();*
}
//]]>
</script>
RichFaces können den Ablauf der Sitzung (und andere Fehler) übernehmen, indem Sie Ihre eigene JS -Funktion definieren, die zum Zeitpunkt der Situation ausgeführt wird.