Java List<T> als Bean an JSP

fs2004

Lt. Junior Grade
Registriert
Apr. 2004
Beiträge
263
Hi zusammen,

ich würde gern eine Liste von Ressorts an eine JSP weitergeben.

In der JSP steht folgender Code am Anfang:
Code:
<jsp:useBean id="ressortList" scope="request" type="java.util.List<com.liferay.portal.model.Group>" />

In meiner Klasse übergebe ich der JSP das Bean so:
request.setAttribute("ressortList", groups);

Beim spuckt mir Eclipse aber folgende Fehler aus:
Caused by: javax.servlet.ServletException: java.lang.InstantiationException: bean ressortList not found within scope

Wie bekomme ich die Liste nun in die JSP?

Gruß,
fs2004
 
java.lang.InstantiationException heißt, dass er manuell eine neue liste anlegen wollte mittels newInstance() methode des Klassenobjektes ... das ist beim interface List so nicht möglich.

versuch mal, stattdessen eine konkrete implementierung anzugeben (bspw ArrayList, ggf. ohne Generics).

vllt. kannst du noch 2 worte mehr sagen, welche technik du genau verwendest, welcher kontext besteht, ob irgendwelche frameworks verwendet werden etc.pp.
 
Ich schreibe gerade ein Portlet für ein Liferay Portal.

Wenn er mit newInstance() ein neues Objekt instanziiert, verliere ich dann nicht meine Werte auch wenn ich eine ArrayList verwende?
 
Hi,

die Bean-Tags verwendet man eigentlich nicht mehr, weil es einfacher zu handhabende Möglichkeiten gibt. Ab JSP 2.0 kann man die JSP-EL (JSP Expression Language)

Im Backend:
Das Bean packst du, wie du es schon machst, einfach mit setAttribute() in den Request.

In der JSP:
In der JSP kannst du dann direkt darauf zugreifen. Das ist syntaktisch sehr viel kürzer, einfacher und dadurch auch besser zu lesen. Das sieht dann folgendermaßen aus.
Code:
<ol>
<c:forEach var="meinListenElement" var="${nameDesBeansImRequestAttribut}">
  <li>${meinListenElement.attributName}</li>
</c:forEach>
</ol>

Das forEach iteriert dir die Elemente deiner List. Dabei steht in var ein JSP-EL-Ausdruck, welche immer in ${} eingeschlossen sind. Darin gibst du den Namen des Beans im Request an. Dieses wird dann also iteriert und der aktuelle Wert steht in meinListenElement.

Auf die Werte der Listenelement kommst du dann ebenfalls mit JSP-EL, indem du einfach

Code:
${meinListenElement.attributName}

schreibst. Dadurch wird dann der entsprechede Getter des Objekts aufgerufen und das Resultat wird dann direkt in die JSP geschrieben.


So mache ich das nun seit ca. 8 Jahren, vor JSP 2.0 musste man für die EL trotzdem noch die Tags benutzen und das ging auch nur, wenn man eine zusätzliche Bibliothek eingebunden hat.


Für das forEach oben musst du natürlich die entsprechende Core-Taglib einbinden mit

Code:
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core">
 
Danke banthor!

Ich habe aber immernoch Probleme :)

Inzwischen habe ich meinen Code etwas umstrukturiert um näher an das MVC zu kommen.
Dazu habe ich eine FuksMsvTransferBean geschrieben, die einen Default-Konstruktor hat, Serializable implementiert und nur set<Attribut> und get<Attribut> Methoden hat.

Mein Problem war bis vorhin noch, dass ich dann in der JSP NullPointerExceptions beim herauslesen der Attribute bekommen habe.
Seit deinem Vorschlag auf EL zu setzten, habe ich die JSTL Libs in mein Buildpath aufgenommen und es mal versucht.
Wenn ich die JSP aber aufrufe bekomme ich aber folgenden Fehler in den Logs:
The absolute uri: http://java.sun.com/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

Wenn ihr den Quellcode der Bean, des Controllers und der JSP braucht, lade ich ihn gern hoch.

Gruß,
Felipe
 
Zurück
Oben