2009-12-02 16 views
5

ist es möglich, fügen Sie Werte an einem Arraylist statt mit einem HashMapWerte In den Gebrauch JSTL

so etwas wie Arraylist:

<jsp:useBean id="animalList" class="java.util.ArrayList" /> 

<c:set target="${animalList}" value="Sylvester"/> 

<c:set target="${animalList}" value="Goofy"/> 

<c:set target="${animalList}" value="Mickey"/> 

<c:forEach items="${animalList}" var="animal"> 

${animal}<br> 

</c:forEach>  

jetzt immer den Fehler:

javax.servlet.jsp.JspTagException: Invalid property in &lt;set&gt;: "null" 

thx

Antwort

1

Der obige Code funktioniert nicht.

Im Folgenden sind die Codezeilen, die in der Datei platziert werden muss animals.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
<c:forEach var="animal" items="${animals}"> 
    <c:set var="animalName" value="${animal}"/> 
    <c:out value="${animalName}"/> 
</c:forEach> 
+4

Das OP benutzte bereits JSTL, es war unnötig, es in meiner Antwort zu erwähnen. Es ist offensichtlich, dass die Taglib deklariert werden muss, um die Tags zu analysieren. Außerdem ist Ihre Taglib-URI weit veraltet. Dazwischen muss ein '/ jsp' sein. – BalusC

11

JSTL ist nicht dafür gemacht, solche Sachen zu machen. Dies gehört wirklich in die Geschäftslogik, die (direkt) von einer Servlet-Klasse gesteuert werden soll.

ein Servlet erstellen, die wie tut:

protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    List<String> animals = new ArrayList<String>(); 
    animals.add("Sylvester"); 
    animals.add("Goofy"); 
    animals.add("Mickey"); 
    request.setAttribute("animals", animals); 
    request.getRequestDispatcher("/WEB-INF/animals.jsp").forward(request, response); 
} 

Karte dieses auf einem url-pattern von /animals.

nun eine JSP-Datei in /WEB-INF/animals.jsp (legen Sie sie in WEB-INF direkten Zugriff zu verhindern) erstellen:

<c:forEach items="${animals}" var="animal"> 
    ${animal}<br> 
</c:forEach> 

Keine Notwendigkeit für jsp:useBean als Servlet hat es bereits festgelegt.

Jetzt rufen Sie das Servlet + JSP von http://example.com/context/animals.

+0

ist es möglich, die c auszuführen: foreach auf einem Arraylist(), die nicht auf Seite scoped ist, Sitzung, etc? Zum Beispiel, wenn die Arraylist eine Eigenschaft in einer Klasse mit einem Getter/Setter war. –

+2

@robert: Sicherlich. Setzen Sie diese Klasse einfach in den Gültigkeitsbereich und verwenden Sie 'items =" $ {bean.list} "' wobei '$ {bean}} auf die Klasse verweist, die eine' getList() 'Methode hat, die die Liste zurückgibt. – BalusC

+1

Danke, du bist sehr schnell! –