# forEach mit normalen Variablen



## Raumsonde (29. Apr 2009)

Meine JSP soll die Werte eines String-Arrays ausgeben, das ich in der JSP selbst anlege.

Wie kann ich dieses mit der Nutzung von forEach wieder ausgeben?

Mein Versuch:


```
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<% String [] nameList = {"Anton", "Berta", "Christine" }; %>
<table>
 <c:forEach var="name" items="${nameList}" >
  <tr>
   <td>${name}</td>
  </tr>
 </c:forEach>
</table>
</body>
</html>
```

gibt ${name} statt der Werte des Arrays aus.

Wie muß ich den Code ändern (unter Beibehaltung von forEach (also kein Java-for)), damit
die Daten des String-Arrays ausgegeben werden?


----------



## MiDniGG (29. Apr 2009)

Bist Du sicher, dass der Pfad zur taglib richtig ist?


----------



## maki (29. Apr 2009)

Denke dass sein Problem ist dass er zwar ein StringArray hat, dieses aber unter keinem Scope als nameList bekannt ist.


----------



## Raumsonde (30. Apr 2009)

MiDniGG hat gesagt.:


> Bist Du sicher, dass der Pfad zur taglib richtig ist?



Ja; die uri habe ich per web.xml in mein WEB-INF\lib-Verzeichnis umgeleitet,
in dem sich die jstl.jar und standard.jar befinden.



maki hat gesagt.:


> Denke dass sein Problem ist dass er zwar ein StringArray hat, dieses aber unter keinem Scope als nameList bekannt ist.



Ja, ich würde gerne wissen, wie ich mit forEach auf Variablen zugreifen kann, die ich selbst
in der JSP angelegt habe.


----------



## gex (30. Apr 2009)

Variablen, welche du über Scriptlets definierst werden bei der Translation als lokale Java Variable deklariert. (Sieh dir mal das Java Resultat der Translation an.)

Die Expression Language (EL) kann jedoch nur Variablen aus den Scopes Page,Request,Session,Application (=ServletContext) auflösen.

Prinzipiell sollte man nicht mehr auf Scriptlets, Expressions und solches Zeugs setzten, ist nicht so toll wartbar.

Das heisst, hinterleg dir die Liste in einen der vier oben genannten Scopes, dann kannst du auch via EL darauf zugreifen.

Wenn du abe trotzdem Scriptles verwenden willst, dann solltest du anstelle von der EL eine Expression verwenden.

```
<% String [] nameList = {"Anton", "Berta", "Christine" }; %>
<table>
 <c:forEach var="name" items="<%= nameList%>" >
  <tr>
   <td>${name}</td>
  </tr>
 </c:forEach>
</table>
```

mit reinem JSTL ginge dein Code aber auch:

```
<table>
 <c:forTokens items="Anton,Berta,Christine" delims="," var="name">
  <tr>
   <td>${name}</td>
  </tr>
 </c:forTokens>
</table>
```


----------

