2009-12-02 9 views
5

è possibile aggiungere valori a un ArrayList invece di utilizzare un HashMapAggiungi valori da ArrayList uso JSTL

qualcosa di simile:

<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>  

ora ottenere l'errore:

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

thx

risposta

1

Il codice sopra riportato non funziona.

seguito sono riportate le linee di codice che deve essere collocato in un file 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

L'OP stava già usando JSTL, non era necessario menzionarlo nella mia risposta. È abbastanza ovvio che il taglib debba essere dichiarato per poter analizzare i tag. Inoltre, l'URI Taglib è obsoleto. Ci deve essere un '/ jsp' in mezzo. – BalusC

11

JSTL non è progettato per questo tipo di cose. Questo appartiene veramente alla logica aziendale che è (in) direttamente controllata da una classe servlet.

Creare un servlet che fa come:

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); 
} 

Mappa su un url-pattern di /animals.

Ora creare un file JSP in /WEB-INF/animals.jsp (metterlo in WEB-INF per impedire l'accesso diretto):

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

Non c'è bisogno di jsp:useBean come servlet è già impostata.

Ora chiamare il servlet + JSP entro http://example.com/context/animals.

+0

è possibile eseguire il c: foreach su un ArrayList() che non è ambito alla pagina, la sessione, ecc? Ad esempio, se l'arraylist era una proprietà in una classe con un getter/setter. –

+2

@robert: Certamente. Basta mettere tale classe nella portata e usare 'items =" $ {bean.list} "' dove '$ {bean}' punta a quella classe che ha un metodo 'getList()' che restituisce la lista. – BalusC

+1

Grazie, sei molto veloce! –