# JSP: Liste in Bean über Session aufbauen



## px5 (11. Dez 2010)

Hallo,

ich habe hier ein Problem mit JSP und Beans, wo ich einfach nicht weiterkomme.
Ich will Daten aus einem WebFormular in einen Bean zwischenspeichern und diesen Bean einer List hinzufügen auf die ich auch als Bean zugreife.
Sinn des ganzen soll sein, dass ich jedesmal wenn ich das Formular abschicke einen neuen Eintrag in der Liste habe, die ich mir als ganze ausgeben lasse.
Nur funktioniert das Ganze leider überhaupt nicht, wenn ich den Scope des eines Beans auf Session  stelle. Obwohl das doch genau dafür gedacht ist?
Hier mal der ganze Code, evtl sieht jemand den Fehler oder kann mir erklären warum das gar nicht so funktionieren kann 



```
<form method="POST">
   Artikelname:
   <input type="text" id="form_name" name="form_name" />
   <br/>
   Preis Trennung mit Punkt:
   <input type="text" id="form_preis" name="form_preis" />
   <br/>
   Anzahl
       <select name="form_anzahl" size="1">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
    </select>  <br/>
   <input type="submit" value="Hinzufuegen" />
</form>
<%@ page import="mmn.*" %>
<jsp:useBean id="item" class="mmn.Item" scope="request" >
<jsp:setProperty name="item" property="name" param="form_name"/>
<jsp:setProperty name="item" property="anzahl" param="form_anzahl"/>
<jsp:setProperty name="item" property="preis" param="form_preis"/>

<jsp:useBean id="shop" class="mmn.Shop" scope="session" >
<% 
for(Item i : shop.getItems())
{
out.println(i.getName());
out.println(i.getAnzahl());
out.println(i.getPreis());
}

shop.addItem(item);

 %>

</jsp:useBean>
</jsp:useBean>
```


----------



## thommy.s (11. Dez 2010)

wär's denn hier nicht angebrachter, den Request-Scope zu nutzen. Du wolltest doch, wie du schreibst, das Ganze nur zwischenspeichern.


----------



## px5 (11. Dez 2010)

thommy.s hat gesagt.:


> wär's denn hier nicht angebrachter, den Request-Scope zu nutzen. Du wolltest doch, wie du schreibst, das Ganze nur zwischenspeichern.



"zwischenspeichern" so lange der User auf der Seite ist. Also auch nach erneuten absenden des Formulars, sollte das Bean Objekt weiter bestehen und ich füge die aktuellen Formulardaten in die Liste ein. So hab ich mir das gedacht und deswegen Session Scope. Mit Request erzeug ich mir ja bei jedem Mal ein neues Bean oder?


----------



## thommy.s (11. Dez 2010)

dann solltest du es vllt. doch ein wenig genauer beschreiben. Was genau funktioniert nicht? Fehlermeldungen etc.. Kommt irgendetwas in deiner Liste an? Oder nicht, oder ggf. zuviel (also der Inhalt deiner Bean mehr als einmal) . Um nicht die Glaskugel bemühen zu müssen, braucht man wohl noch einige Informationen.


----------



## px5 (11. Dez 2010)

es kommt nichts in der liste an.
sobald ich den scope auf request stelle, kommt nach einem submit das element an.
nur ich will ja das bei mehrmaligem submit alle in der liste gespeichert werden.


----------



## tagedieb (11. Dez 2010)

Du musst die jsp:useBean Tags wieder schliessen wenn du die Beans erstellt hast. Ich bin mir nicht sicher aber ich denke der Code zwischen dem Start- und End tag wird NUR beim erzeugen des Beans ausgefuehrt. Im Request scope funktioniert dein Code da der Shop ja in jedem Request erstellt wird, aber im Session Scope wird dein code nur beim ersten mal ausgefuehrt!

Versuch mal die mal hier:



```
<%@ page import="mmn.*"%>
<jsp:useBean id="item" class="mmn.Item" scope="request">
	<jsp:setProperty name="item" property="name" param="form_name" />
	<jsp:setProperty name="item" property="anzahl" param="form_anzahl" />
	<jsp:setProperty name="item" property="preis" param="form_preis" />
</jsp:useBean>

<jsp:useBean id="shop" class="mmn.Shop" scope="session">
</jsp:useBean>

<%
	for (Item i : shop.getItems()) {
		out.println(i.getName());
		out.println(i.getAnzahl());
		out.println(i.getPreis());
	}

	shop.addItem(item);
%>
```


----------



## px5 (12. Dez 2010)

Das wars, Vielen Dank!


----------

