Daten in der Benutzersitzung speichern

Webanwendungen gelten als statusunabhängig, da die Informationen zu den Interaktionen eines Benutzers mit der Anwendung darin nicht automatisch gespeichert werden. Wenn in der Anwendung Details zu den Aktionen des Benutzers gespeichert werden sollen, müssen diese Informationen explizit irgendwo gespeichert werden.

In Webanwendungen werden diese Details häufig im Sitzungsobjekt des Benutzers gespeichert. Dabei handelt es sich um einen Speicherbereich auf dem Server, auf dem die temporären Informationen zu den Transaktionen und Interaktionen eines Benutzers mit der Webanwendung gespeichert werden. Die Daten im Sitzungsobjekt sind nicht so stabil wie in einer Datenbank gespeicherte Daten, da das Sitzungsobjekt nach dem Sitzungsende nicht mehr vorhanden ist. Das Speichern von Daten im Sitzungsobjekt ist kurzfristig dennoch nützlich, wenn es effizient erfolgt.

Wenn ein Benutzer eine EGL-gesteuerte Webseite öffnet, wird der JSF-Handler der Seite (zur Laufzeit als Page-Bean dargestellt) vom Server geladen und die Bean im Sitzungsobjekt als Sitzungsvariable gespeichert und zum Bereitstellen der Logik für die Seite verwendet. Wenn die Eigenschaft 'scope' des JSF-Handlers auf session festgelegt und dessen Eigenschaft 'cancelOnPageTransition' auf no festgelegt ist, verbleibt die Bean im Sitzungsobjekt, bis die Sitzung beendet wird oder das Zeitlimit der Bean überschritten wird. Auf diese Weise können Variablen im Handler ihre Werte während der Sitzung beibehalten, auch wenn der Benutzer auf eine andere Seite wechselt.

Page-Beans können jedoch große Speichermengen in Anspruch nehmen. Eine viel effizientere Weise zum Verwenden des Sitzungsobjekts (und somit auch der Serverressourcen) ist das Speichern der Informationen eines Benutzers in eigenen kleineren Sitzungsvariablen und das anschließende Entfernen der Beans aus dem Sitzungsobjekt durch Festlegen der Eigenschaft 'scope' des JSF-Handlers auf request oder der Eigenschaft 'cancelOnPageTransition' auf yes. Auf diese Weise werden nur die für die Anwendung benötigten Daten beibehalten, nicht alle Variablen in den Handlern.

Sitzungsvariablen festlegen und abrufen

Übergeben Sie zum Festlegen einer Sitzungsvariable eine Zeichenfolgen-ID und eine EGL-Variable an das Sitzungsobjekt:
myVar string = "Hello";
J2EELib.setSessionAttr("mySessionVar", myVar);
Um den Wert später abzurufen, verwenden Sie die Systemfunktion 'J2EELib.getSessionAttr' mit derselben ID und einer neuen Variable:
myVarFromSession string;
J2EELib.getSessionAttr("mySessionVar", myVarFromSession);
Im Folgenden ist ein vollständiges Beispiel von zwei JSF-Handlern aufgeführt, durch die eine Sitzungsvariable festgelegt und abgerufen wird: Mit dem ersten Handler wird die Sitzungsvariable festgelegt:
package jsfhandlers;

handler sessionPageOne type JSFHandler
   {scope = request,
    view = "sessionPageOne.jsp"} 
    
    userRecord sessionRecord;
    
    function storeAndForward()
        J2EELib.setSessionAttr("mySessionRecord", 
            userRecord);
        forward to "sessionPageTwo";
    end
    
end

record sessionRecord type BasicRecord 
    userName string;
    idNumber int;
end
In diesem Beispiel wird von einer Webseite mit dem Namen sessionPageOne.jsp mit zwei Eingabefeldern ausgegangen, die an die Felder im Datensatz gebunden sind, und mit einer an die Funktion storeAndForward gebundenen Befehlsschaltfläche. Wenn der Benutzer auf die an die Funktion storeAndForward gebundene Schaltfläche klickt, wird der Datensatz zur Sitzungsvariable des Benutzers hinzugefügt und der Benutzer wird auf eine andere Seite weitergeleitet, die vom folgenden JSF-Handler dargestellt wird:
package jsfhandlers;

handler sessionPageTwo type JSFHandler
   {view = "sessionPageTwo.jsp",
    onPreRenderFunction = onPreRender} 

    submittedRecord sessionRecord;

    function onPreRender()
        J2EELib.getSessionAttr("mySessionRecord", 
            submittedRecord);
    end
end
Wie beim vorherigen Handler wird in diesem Beispiel vorausgesetzt, dass die Felder im Datensatz an Ausgabevariablen auf der Seite sessionPageTwo.jsp gebunden sind. Mit diesem Handler werden die Daten aus der Sitzungsvariablen abgerufen und einer Variable für temporäre Verwendung innerhalb des JSF-Handlers zugewiesen.

Sitzungsvariablen löschen

Sie können einzelne Sitzungsvariablen aus dem Sitzungsobjekt entfernen, indem Sie die Zeichenfolgen-ID der Variable an die Funktion 'J2EELib.clearSessionAttr' übergeben:
J2EELib.clearSessionAttr("mySessionRecord");

Sie können außerdem alle EGL-gesteuerten Sitzungsvariablen aus dem Sitzungsobjekt des Benutzers mithilfe der Funktion 'J2EELib.clearEGLSessionAttrs' entfernen.

Weitere Informationen zu sitzungsbezogenen Funktionen finden Sie im Abschnitt zur EGL-Bibliothek 'j2eeLib' in der EGL-Sprachreferenz.


Feedback