将值添加到arraylist使用JSTL

时间:2009-12-02 18:59:42

标签: java jstl

是否可以将值添加到ArrayList而不是使用HashMap

类似的东西:

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

现在收到错误:

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

THX

3 个答案:

答案 0 :(得分:11)

JSTL不是为了做这种事情而设计的。这实际上属于业务逻辑,它直接由servlet类控制。

创建一个类似于:

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

将其映射到url-pattern的{​​{1}}。

现在在/animals中创建一个JSP文件(将其放在/WEB-INF/animals.jsp中以防止直接访问):

WEB-INF

不需要<c:forEach items="${animals}" var="animal"> ${animal}<br> </c:forEach> 因为servlet已经设置了它。

现在通过jsp:useBean调用servlet + JSP。

答案 1 :(得分:1)

以上代码无效。

以下是必须放在文件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>

答案 2 :(得分:1)

要对Map或Set等中的List或其他方法进行add()操作,您必须使用无法使用的变量。

<jsp:useBean id="list" class="java.util.ArrayList"/> <c:set var="noUse" value="${list.add('YourThing')}"/> <c:out value=${list} />