# Struts Form Bean vs. Session Variable



## pymote (21. Sep 2006)

Hallo,

Wo liegt der Unterschied der Speicherung von Daten in Form Beans und Session Variablen?
In Anfängertutorials zum Thema Struts bekommt man die Verwendung von Form Beans eingetrichtert. Ich frag mich aber gerade welche Vorteile dies bieten soll. Wieso sollte ich nicht einfach die Formulardaten, etc. in meiner Session speichern?

danke und gruss


----------



## RaoulDuke (21. Sep 2006)

Im einem Struts Action Form werden nicht nur Daten gespeichert, sondern es gibt auch eine Methode validate() die diese Daten gleich überprüfen kann.

Natülich hindert dich niemand Formulardaten direkt im Request oder in der Session zu speichern, nur ist das halt umständlicher. Mit den ActionForms hat man eine klare Definition welche Daten in einem Formular erwartet werden und welche nicht. 

Es wäre nicht nur unübersichtlich sondern auch objektorientiert gesehen falsch die Daten nicht in einem Formular Objekt unterzubringen.


----------



## pymote (21. Sep 2006)

danke für die schnelle antwort

deinen argumenten kann ich dir nur zustimmen. ich habe es auch gerne klar definiert welche Daten erwarten werden oder nicht.
der grund wieso ich daten in einer session-variable speichern möchte ist, weil ich so in jeder klasse/methode einfach die daten beziehen/beschreiben kann. in einer struts-typischen action methode kann ich meines wissens ja nur auf das in der struts-config.xml spezifizierte form bean zugreifen (<action name="MyForm" ... )

oder hab ich da was nicht richtig verstanden?


----------



## RaoulDuke (21. Sep 2006)

Erstmal muss man unterscheiden: Die ActionForms werden nicht immer in der Session gespeichert, sonders es hängt von der Einstellung in der struts-config.xml ab. Im Normalfall reicht es ein Formular nur im Request Kontext zu übergeben. Legt man es in der Session ab bleibt es auch über mehrere weitere Requests bestehen, das kann z.B. nützlich sein wenn man ein Formular über mehrere Seiten verteilt ausfüllen will.

Prinzipiell kann man auf ein Formular von überall rankommen wo man Zugriff auf den Request und Session Kontext hat. Ich kann in einer Action also nicht nur auf das Formular zugreifen das ich, weil es in der struts-config.xml so definiert ist, als Parameter übergeben krige, sondern ich kann mir auch aus der Session oder dem Request Kontext sonstige Formulare abholen. In der struts-config.xml kann man ja zu jeder Action angeben unter welchem Namen das Formular in welchem Scope gespeichert werden soll.


----------



## pymote (21. Sep 2006)

angenommen ich bin in einer methode "ActionForward methodeA()" und in der stuts-config.xml hab ich für diese action mein FormBeanA definiert. ich will jetzt aber auf daten unterschiedlicher FormBeans (FormBeanA und FormBeanB) zugreifen. Wie mach ich das?


----------



## RaoulDuke (21. Sep 2006)

z.B. so:


```
FormB formb = (FormB) request.getSession().getAttribute("FormBName");
```

Wobei FormB die Klasse ist, und FormBName der Name unter dem Struts das Formular im Session Kontext abgelegt hat. Struts legt ein Formular standardmässig unter dem Namen ab, der in der struts-config.xml definiert ist.

Also: 


```
<form-bean name="SearchForm" type="app.struts.forms.SearchForm"/>

<action path="/SearchXYZ" 
            input="/Search" 
            name="SearchForm" 
            scope="session" 
            type="app.struts.actions.SearchAlSc">
```

In dem Beispiel krigt die Action /SearchXYZ das definierte SearchForm übergeben und speichert es unter dem Namen "SearchForm" in der Session ab. In der Session weil scope="session" gesetzt ist. Daher bleibt das Form da jetzt so lange liegen bis man es entfernt, oder bis die Session endet.

Man kann auch noch mit dem Parameter attribute="AndererName" einen anderen Namen definieren unter dem das Formular abgelegt wird, ansonsten nimmt Struts den Namen. Das ist z.B. ganz nützlich wenn man das gleiche Formular 2 mal auf der gleichen Seite verwenden will. Sonst könnte man die Daten der beiden Formulare nicht auseinanderhalten.


----------



## pymote (22. Sep 2006)

ok, jetzt ist mir einiges klar geworden. ich danke dir.


----------

