2009-12-02 23 views
5

es posible añadir valores a un ArrayList en lugar de utilizar un HashMapañadir valores a arrayList uso JSTL

algo como:

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

ahora conseguir el error:

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

THX

Respuesta

1

El código anterior no funciona.

A continuación se presentan las líneas de código que tiene que ser colocado en el archivo 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

El OP ya estaba usando JSTL, no fue necesario mencionarlo en mi respuesta. Es bastante obvio que se debe declarar el taglib para que las etiquetas se analicen. Además, su URI taglib está muy desactualizado. Tiene que haber un '/ jsp' entre ellos. – BalusC

11

JSTL no está diseñado para hacer este tipo de cosas. Esto realmente pertenece a la lógica de negocios que está (en) directamente controlada por una clase de servlet.

Crear un servlet, que le gusta:

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

Ubicación en una url-pattern de /animals.

Ahora cree un archivo JSP en /WEB-INF/animals.jsp (colocarlo en WEB-INF para evitar el acceso directo):

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

No hay necesidad de jsp:useBean como servlet ya se ha puesto en él.

Ahora llame al servlet + JSP por http://example.com/context/animals.

+0

es posible ejecutar el c: foreach en un ArrayList() que no tiene como alcance la página, la sesión, etc? Por ejemplo, si el arraylist era una propiedad de una clase con un getter/setter. –

+2

@robert: Ciertamente. Simplemente ponga esa clase en el alcance y use 'items =" $ {bean.list} "' donde '$ {bean}' apunta a esa clase que tiene un método 'getList()' que devuelve la lista. – BalusC

+1

¡Gracias, eres muy rápido! –

Cuestiones relacionadas