# SessionScope vs RequestScope



## internet (2. Nov 2013)

Hallo zusammen,

ich habe folgendes Problem:

Ich habe ein Menü, über das ich auf eine Seite userEdit.jsf navgiere durch die Methode String doEditUser()

Diese Funktion läd mir die akutellen Daten des Users, die dann in den Textfeldern sind.
Editiere ich nun die Angaben und klicke auf einen Button "Speicher", sollen die Änderungen in die DB übernommen werden.

Das klappt auch alles wenn es "SessionScoped" ist.
Allerdings macht das doch kein Sinn und braucht einiges an Ressourcen?

Was gibt es hier für bessere Lösungen?

Ich bitte um Ratschläge


----------



## KSG9|sebastian (4. Nov 2013)

SessionScooe hat nix mit persistieren zu tun. Zeig mal Code und Beschreib dein Problem.

Für ne einfache Eingabe/Anzeige reicht definitiv RequestScope . SessionScoped kannst du einsetzen wenn du Daten in der Session halten musst


----------



## dlohd101 (4. Nov 2013)

Es gibt eine klaren Unterschied bzgl. der Gültigkeit von Daten innerhalb einer Session und eines Request:

Session = Sitzung --> Mehrere Zusammengehörende Schritte/Daten (eines Anwenders) auf einer Site (nicht eine einzelne Webseite) können so verknüpft werden. Bspw. Anmeldung in einem Webshop mit dem Benutzernamen; der Warenkorb wird innerhalb der gesamten Sitzung bekannt sein. Nach Abmeldung gehen die DAten verloren wenn sie nicht vorher gespeichert werden. 

Request = einzelne Anfrage an den Server --> Eingabe von Daten in ein Webformular und Senden an den Server (bzw. Servlet) zur Weiterverarbeitung. Die Formulardaten werden im Request gekapselt und sind nur zwischen den beiden Komponenten Formular und Servlet bekannt und werden nach der Verarbeitung verworfen.


----------



## Phash (4. Nov 2013)

Du hast wahrscheinlich ein Problem, weil das Objekt detached ist.

du musst das Objekt mit merge in die Datenbank schreiben - das kann Hibernate, oder du machst es selber.

Du suchst dir das Objekt nochmal neu aus der Datenbank, und kopierst die Werte, das du in deiner Form befüllt hast, rüber

also:

Datenbank -> holt Objekt "Benutzer1"
Form wird mit Benutzer1 Werten befüllt. Objekt wird detached. (wenn nicht anders angegeben ist das afaik der Standard)

die Form wird ausgefüllt und abgeschickt.

Benutzer1 ist detached, aber mit neuen Werten - die ID ist jedoch gleich geblieben
Objekt "Benutzer1 attached" aus der Datenbank holen, und Werte von "Benutzer1 detached" in "Benutzer1 attached" kopieren.
Objekt Benutzer1 attached mit update in die DB schieben.

Hibernate bietet hierfür "merge" an, was aber irgendwie ab und zu nicht geklappt hat, weswegen wir das meist bleiben gelassen haben (hoffe, das ist besser geworden)


----------



## javasofty (11. Nov 2013)

Hallo!
Ich kann Dir den folgenden Link empfehlen: testScriptVarScope.jsp 
Dort findest 53 Topics mit Sourcecode zu Thema Java Web App Programming.
"learning by doing" with sourcecode incl.
L.G. javasofty


----------

