# For-Schleife mit JSTL über ArrayList



## P4G0 (3. Nov 2009)

Hallo Leute,

ich beschäftige mich gerade im Zusammenhang mit einem Studien-Projekt mit JSPs. Derzeit gebe ich mit Hilfe eines Scriptlets die Daten einer MySQL-Tabelle aus, das möchte ich aber gerne mit JSTL lösen, nur habe ich keine Ahnung wie ich das anstelle. Eine längere Suche im Netz hat mir auch nicht weitergeholfen.

Der Quellcode sieht gerade wie folgt aus (unwichtige Stellen kürze ich mit [...])

```
<%@page import="usermanager.*" %>
[...]
<jsp:useBean id="userTable" class="usermanager.UserTable" />
<% if(userTable.hasUsers()) { %>
<table>
[...]
   <% for(User user : userTable.users) { %>
   <tr>
      <td><p><%= user.getUsername() %></p></td>
      <td><p><%= user.getPassword() %></p></td>
      <td><p><%= user.getAdded() %></p></td>
      <td><p><a href="edituser.jsp?id=<%= user.getId() %>">bearbeiten</a></p></td>
      <td><p><a href="deleteuser.jsp?id=<%= user.getId() %>">löschen</a></p></td>
   </tr>
   <% } %>
</table>
<% } %>
```

Kann mir jemand sagen, wie ich das ganze auf JSTL umstricke? Oder verstehe ich die JSTL falsch und die Funktioniert nur auf XML-Ebene?

Danke schonmal


----------



## maki (4. Nov 2009)

> ine längere Suche im Netz hat mir auch nicht weitergeholfen.


Wirklich?
Hast du mal Google probiert?


----------



## P4G0 (4. Nov 2009)

Hab gestern doch noch eine Lösung (über Google ) gefunden: Use ForEach to Loop Through ArrayList : ForEachJSTLJava Tutorial

Nachdem ich 12 Stunden lang am Stück programmiert habe, waren meine Google-Fähigkeiten wohl eingeschränkt :autsch:

Aber eine Frage habe ich noch: Gibt es eine Möglichkeit, JSTL mit normalen Methoden-Aufrufen zu nutzen, sodass ich nicht immer eine Wrapper-Klasse mit Gettern und Settern schreiben muss? 

Ich habe in der Richtung die Runtime-Version der Core-Bibliothek gefunden (core_rt), finde aber keine Beispiele mit Methodenaufrufen, sondern nur z.B. mit Zugriffen auf Indizes eines Arrays oder ähnlichem.


----------



## maki (4. Nov 2009)

Soviel ich weiss sind die JSTL Tags auf die JavaBEan Spek. angewiesen.
Ist aber cniht wqirklich schlimm, dnen an dieser Stelle solltest du sowieso nur "dumme" Beans einsetzen 

Ach ja, bevor ich es vergesse: JSP ist ein Auslaufmodell, bald nur noch für "legacy" Apps relevant.


----------



## P4G0 (4. Nov 2009)

Hab mir die Seite nochmmal gründlich durchgelesen, Methoden kann man mit der RT-Version anscheinend doch nutzen:

```
<c_rt:out value='<%= list[list.size()-1] %>'/>
```
Wird dort als valides Beispiel angegeben.

Wieso sollte JSP auslaufen? Kannst du das näher erläutern und evtl. mit ner Quelle untermauern?


----------



## maki (4. Nov 2009)

> Methoden kann man mit der TT-Version anscheinend doch nutzen:


k.A. was du mit "TT Version" meinst, aber in Scriplets konnte man schon immer alles nutzen, aber Scriptlets sind ja auch Java und deswegen Böse in JSPs.
Als Alternative gibt es die EL (Expression Language).


> Wieso sollte JSP auslaufen? Kannst du das näher erläutern und evtl. mit ner Quelle untermauern?


Klar, mit der nächsten Version von JEE (6) werden Facelets anstatt JSPs zur Standard View Technologie, JSP wird nicht mehr weiterentwickelt.


----------



## P4G0 (4. Nov 2009)

Oh hab mich vertippt: TT = RT = Runtime


----------



## maki (4. Nov 2009)

Hat nix damit zu tun, Sciptlets sind Scriptlets, immer


----------



## P4G0 (4. Nov 2009)

Also in meiner JSP kommt nun kaum noch Scriptlet-Code vor, das Beispiel von oben sieht nun so aus:

```
<%@page import="webdemo.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% pageContext.setAttribute("userTable", new UserTable()); %>
<c:if test="${userTable.filled}">
	<table>
		<c:forEach items="${userTable.users}" var="user">
		<tr>
			<td><p>${user.username}</p></td>
			<td><p>${user.password}</p></td>
			<td><p>${user.added}</p></td>
			<td><p><a href="index-good.jsp?delete=${user.id}">löschen</a></p></td>
		</tr>
		</c:forEach>
</table>
</c:if>
```
Ist also eine Mischung aus JSTL und EL. Was mich nun halt stört ist, dass ich eine Methode getFilled() anlegen muss, damit ich per JSTL auslesen kann, ob die ArrayList schon Einträge hat. Da würde ich lieber eine Methode wie isFilled() haben, nur das entspricht ja wieder nicht den Beans...


----------

