# myFaces - Scope und t:saveState Erfahrungen



## y0dA (17. Mrz 2008)

Hi!
Stehe gerade vor dem Problem, dass für meine Beans einen korrekten scope setzen muß. An und für sich habe ich für jede JSP Seite einen Controller, welcher demnach nur solange existent sein sollte, solange der Benutzer auf dieser Seite ist --> also scope = request ? Hierbei besteht das Problem, dass ich nicht weiß ob das "performant" bzw sauber gelöst ist, da bei scope=request ja bei jeder Anfrage sämtliche Daten aus der DB neu geladen werden - gibts hierzu eine Abhilfe?

Versucht habe ich es schon mit t:saveState --> nur bleibt hier dann die Bean auch zulange erhalten (eben bis zum Logout).

Also wie löst man so ein Problem "schön"?

Sollte ich bspw. jene Daten die aus der DB geladen werden in einer separaten Bean ablegen und die Request Scope Controller holen sich von dort die Daten?


----------



## maki (17. Mrz 2008)

Frameworks wie zB. shale-dialog bieten einen zusätzlichen Scope: Dialog


----------



## y0dA (17. Mrz 2008)

Ja nur ich benutze myFaces und möchte nicht noch ein Framework implementieren oder umsteigen ..

Also keine Idee? Bzw warst du noch nicht in so einer Situation?


----------



## maki (17. Mrz 2008)

Klar hat jeder irgendwan das Problem: session scope ist zu grob-, request viel zu feingranular...

shale ist etwas das man haben sollte, oder zumindest Teile davon, löst allgemeine Problem wie dieses.
Der alte Name ist übrigens struts2, wenn dir das etwas sagt


----------



## y0dA (17. Mrz 2008)

Also soll ich nun auch noch struts2 benutzen - mühsam..


----------



## maki (17. Mrz 2008)

Mühsam? ne, kannst dir ja auch alles selbst schreiben was in shale ist... das ist mühsam 

JSF an sich ist nur ein Grundgerüst, du wirst immer zusätzliche Frameworks brauchen, entweder selbstgeschriebene, oder verbreitete OS Lösungen.


shale macht viele Dinge viel einfacher.


----------



## y0dA (17. Mrz 2008)

Ja nur steht die Applikation mehr oder weniger und ich weiß nicht was für die Migration von Shale nun wieder alles verändert werden darf.


----------



## y0dA (17. Mrz 2008)

Hmm MyFaces Orchestra könnte das auch und würde auch mehr Hibernate Unterstützung bieten - schon jemand Erfahrung damit gemacht?


----------



## unkreativ (23. Mrz 2008)

Hallo,

meine Wenigkeit hatte schon einige Male mit MyFaces Orchestra zu tun, und es ist halt, wie alles andere, empfehlenswert abhängig von dem was du machen willst. Deine ursprüngliche Intention war ja soweit ich das verstehe einen Dialog mit JSF zu implementieren und unter einem Dialog verstehe ich normalerweise einen sehr strikten, vordefinierten Page Flow (d.h. du gibst dem Benutzer explizit nicht die Möglichkeit dahin zu gehen, wo es ihm gerade passt, sondern er hat einen ganz klar vorgegebenen Weg einzuschlagen, z.B. über Back- und Next-Buttons). In diesem Fall ist vielleicht Spring Web Flow [1] die attraktivere Alternative, da es genau das und vieles mehr bietet. Die aktuelle Version hat zwar built-in keine PersistenceContext-Verwaltung (also das, was du als "Hibernate Unterstützung" bezeichnet hast), aber das selbst zu implementieren ist keine große Hexerei. Ab der 2.0er Version gibt es das dann auch built-in. Augenmerk wird in Spring Webflow aber eigentlich auf den Aspekt der Navigation gelegt.

Falls du aber eigentlich nur Wert legst auf Dialoge wegen dieses zusätlichen Conversation-Scopes, dann kannst du natürlich auch MyFaces Orchestra [2] verwenden. Auch wenn das Setup davon vielleicht etwas komplex gestaltet wurde, lässt es sich relativ einfach und somit zielführend verwenden.

grüße,
unkreativ

[1]: http://www.springframework.org/webflow
[2]: http://myfaces.apache.org/orchestra


----------



## javaDoodie (22. Jan 2009)

Hi, 

und wenn dir t:saveState, Orchestra, Shale und Spring WebFlow zu kompliziert ist, dann benutz einfach ploinFaces. 

http://www.ploinfaces.org/

sind 36 KB. Damit kannst du in einer kurzen XML-File, einen flow definieren. Ein Flow besteht aus beliebig vielen views (XHTML oder JSP-Seiten) und aus beliebig vielen Attributen (ManagedBeans). Wenn du den Flow verlaesst entfernt ploinFaces die Attributen (Beans) aus der Session. 
Im Code selber hast du keinerleit Abhaengigkeit zu ploinFaces. Habe damit bisher sehr gute Erfahrungen gemacht.


----------

