# Auf List mit JSP zugreifen



## rbrose (26. Okt 2004)

Ich habe eine Seite aufgebaut mit Struts.

Und ich habe jetzt ein problem und zwar:
Ich lese mit Hibernate eine Tabelle aus der Datenbank aus und füge die Daten in eine LIST

Meine Frage ist jetzt wie bekomme ich die Daten von der List in der .java in eine JSP?

hier der Code

```
/**
 * Created by IntelliJ IDEA.
 * User: rbrose
 * Date: 20.10.2004
 * Time: 15:45:27
 * To change this template use File | Settings | File Templates.
 */

import org.apache.struts.action.*;

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.Date;
import java.util.List;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;

public class HelloWorldAction extends Action
{
    private SessionFactory sessionFactory;

    String username;
    String email;
    String homepage;
    String icq;
    String wohnort;
    String kommentar;
    String radio1;

    public ActionForward execute(ActionMapping actionMapping,
                                 ActionForm actionForm,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws IOException, ServletException
    {
        loginForm form = (loginForm) actionForm;

        username = form.getUsername();

        email = form.getEmail();
        homepage = form.getHomepage();
        icq = form.getIcq();
        wohnort = form.getWohnort();
        kommentar = form.getKommentar();
        radio1 = form.getRadio1();

        initDatabase();
        setDatabaseSource(username,email,homepage,icq,wohnort,kommentar,radio1);

        request.setAttribute("radio1", radio1 );
        request.setAttribute("kommentar", kommentar);
        request.setAttribute("wohnort", wohnort);
        request.setAttribute("icq", icq);
        request.setAttribute("homepage", homepage);
        request.setAttribute("email", email);
        request.setAttribute("user", username);

        // test output

        List events = getDatabaseSource();
			for (int i = 0; i<events.size(); i++) {
				Event theEvent = (Event) events.get(i);
				System.out.println("Event " + theEvent.getName() + " Time: " + theEvent.getDate() + " ICQ: " + theEvent.getIcq());
			}
        

        //--------------


        return actionMapping.findForward("success");
    }

    public void initDatabase()
    {
          try {
			System.out.println("Initializing Hibernate");
			sessionFactory = new Configuration().configure().buildSessionFactory();
			System.out.println("Finished Initializing Hibernate");
		} catch (HibernateException e) {
			e.printStackTrace();
		}
    }

     public void setDatabaseSource(String name, String email, String homepage, String icq, String wohnort, String kommentar,String radio1)
    {
         Date datum = new Date();
         try {
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();

            Event theEvent = new Event();

            theEvent.setName(name);
            theEvent.setEmail(email);
            theEvent.setHomepage(homepage);
            theEvent.setIcq(icq);
            theEvent.setWohnort(wohnort);
            theEvent.setKommentar(kommentar);
            theEvent.setRadio1(radio1);

            theEvent.setDate(datum);

            session.save(theEvent);

            tx.commit();
            session.close();

        } catch (HibernateException e) {
            e.printStackTrace();
        }
    }

    public List getDatabaseSource()
    {
        try {
			Session session = sessionFactory.openSession();
			Transaction tx = session.beginTransaction();

			List result = session.find("from Event");

			tx.commit();
			session.close();

			return result;
		} catch (HibernateException e) {
			throw new RuntimeException(e.getMessage());
		}
    }
}
```

Und die List die ich ausgelesen hab muss hier sein


```
<table>
<tr>
   <td>
        Name:  
   </td>
   <td>
       E-Mail:
   </td>
   <td>
       ICQ:
   </td>
   <td>
       Homepage:
   </td>
   <td>
       Wohnort:
   </td>
   <td>
       Kommentar:
   </td>

</tr>
</table
```


Die Tabelle muss also sich aufbauen, das heisst die Tabelle muss in eine Schleife.


Danke schonmal für die Hilfe


----------



## bygones (26. Okt 2004)

speichere die Liste in einem Bean ab und speichere den Bean in dem Request in der Action. Auf der success Seite holst du dir den Bean aus dem Request und damit dann auch die Liste....


----------



## rbrose (26. Okt 2004)

Kann du mit Beispiel geben Sourcecode?
Ich weiss nicht wie ich das mache


----------



## bygones (26. Okt 2004)

oh gott - keine ahnung ob ich das noch hinbekomm...

bevor ich schwachsinn erzähl: schau mal hier: http://javaboutique.internet.com/tutorials/StrutsTags/ da isses auch an einer Liste erklärt   [/code]


----------



## Bleiglanz (26. Okt 2004)

> peichere die Liste in einem Bean ab und speichere den Bean



Hä? Die Liste selbst kannst du  mit setAttribute in den Request scope legen und auf der jsp-Seite einfach wieder mit  <jsp:useBean  rausholen


----------



## bygones (26. Okt 2004)

Bleiglanz hat gesagt.:
			
		

> Hä? Die Liste selbst kannst du  mit setAttribute in den Request scope legen und auf der jsp-Seite einfach wieder mit  <jsp:useBean  rausholen


klar - das natürlich auch


----------



## baer1208 (5. Apr 2005)

hy @ all!

hab so ähnliches problem:
wills mit setAttribute machen...doch in welche Bean muss ich das schreiben?? in der Bean, wo die Liste erzeugt wird??

```
persons.setAttribute(personen, persons);
```
??
oder doch wo anders?
danke schon mal für die antwort(en)!

sAn
ciao baer


----------



## KSG9|sebastian (5. Apr 2005)

Welchen Typ verwendet ihr ?

java.util.List oder die ListenImplementation von Hibernate ? Wenn ihr die von Hibernate verwendet solltet ihr über die Liste iterieren ( List#iterator() ) und die Daten in ne andere Struktur bringen. 

Dann schreibt ihr den Bean einfach in den Request:


```
List a = getDataFromDb(); //Daten mittels Hibernate auslesen
//In der Liste befinden sich nun die Daten, und zwar in Form von
//objekten der jeweiligen Tabelle/Klassen
request.setAttribute("daten", a);
```

Dann könnt ihr mittels jsp:useBean ... drauf zugreifen und mit

logic:iterate über die Liste iterieren

//Edit:

Ich koppelt doch for nen FormBean ne ActionForm, nehm ich mal an! Dann schreibt ihr das ganze in die ActionForm. Ist aber nicht die sauberste Lösung. Die beste Lösung wäre, wenn ihr den FormBean in der ActionForm mit Daten befüllt, auch gleich die DB-Daten mitgeben.


----------



## KSG9|sebastian (5. Apr 2005)

Sieht dann so aus:


```
/**
* Created by IntelliJ IDEA.
* User: rbrose
* Date: 20.10.2004
* Time: 15:45:27
* To change this template use File | Settings | File Templates.
*/

import org.apache.struts.action.*;

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.Date;
import java.util.List;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;

public class HelloWorldAction extends Action
{
    private SessionFactory sessionFactory;

    String username;
    String email;
    String homepage;
    String icq;
    String wohnort;
    String kommentar;
    String radio1;

    public ActionForward execute(ActionMapping actionMapping,
                                 ActionForm actionForm,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws IOException, ServletException
    {
        loginForm form = (loginForm) actionForm;

        username = form.getUsername();

        email = form.getEmail();
        homepage = form.getHomepage();
        icq = form.getIcq();
        wohnort = form.getWohnort();
        kommentar = form.getKommentar();
        radio1 = form.getRadio1();

//Change
        form.setData(<Hier die Daten aus der DB>);
//Change Ende
        initDatabase();
        setDatabaseSource(username,email,homepage,icq,wohnort,kommentar,radio1);

        request.setAttribute("radio1", radio1 );
        request.setAttribute("kommentar", kommentar);
        request.setAttribute("wohnort", wohnort);
        request.setAttribute("icq", icq);
        request.setAttribute("homepage", homepage);
        request.setAttribute("email", email);
        request.setAttribute("user", username);

        // test output

        List events = getDatabaseSource();
         for (int i = 0; i<events.size(); i++) {
            Event theEvent = (Event) events.get(i);
            System.out.println("Event " + theEvent.getName() + " Time: " + theEvent.getDate() + " ICQ: " + theEvent.getIcq());
         }
       

        //--------------


        return actionMapping.findForward("success");
    }

    public void initDatabase()
    {
          try {
         System.out.println("Initializing Hibernate");
         sessionFactory = new Configuration().configure().buildSessionFactory();
         System.out.println("Finished Initializing Hibernate");
      } catch (HibernateException e) {
         e.printStackTrace();
      }
    }

     public void setDatabaseSource(String name, String email, String homepage, String icq, String wohnort, String kommentar,String radio1)
    {
         Date datum = new Date();
         try {
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();

            Event theEvent = new Event();

            theEvent.setName(name);
            theEvent.setEmail(email);
            theEvent.setHomepage(homepage);
            theEvent.setIcq(icq);
            theEvent.setWohnort(wohnort);
            theEvent.setKommentar(kommentar);
            theEvent.setRadio1(radio1);

            theEvent.setDate(datum);

            session.save(theEvent);

            tx.commit();
            session.close();

        } catch (HibernateException e) {
            e.printStackTrace();
        }
    }

    public List getDatabaseSource()
    {
        try {
         Session session = sessionFactory.openSession();
         Transaction tx = session.beginTransaction();

         List result = session.find("from Event");

         tx.commit();
         session.close();

         return result;
      } catch (HibernateException e) {
         throw new RuntimeException(e.getMessage());
      }
    }
}
```

In dem Bean müsst ihr eben nen Getter und Setter bzw. das Attribut dazu machen


----------



## baer1208 (5. Apr 2005)

sorry für meinen zwischenpost! mein problem hat sich erledigt..funzt!

danke für die tollen posts in diesem forum!

ciao baer


----------

