使用JSTL向ArrayList添加值

6

有没有可能使用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个回答

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

将其映射到/animalsurl-pattern上。

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

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

不需要使用jsp:useBean,因为servlet已经设置了它。

现在通过http://example.com/context/animals调用servlet+JSP。


在没有页面、会话等范围限制的情况下,是否可以在 ArrayList() 上运行 c:foreach?例如,如果 arraylist 是一个具有 getter/setter 的类中的属性。 - user568171
2
@robert:当然可以。只需将该类放入范围中,并使用items="${bean.list}",其中${bean}指向具有返回列表的getList()方法的类即可。 - BalusC

3
要将add()方法添加到List或其他Map、Set等方法中,您需要使用一个无用的变量。
<jsp:useBean id="list" class="java.util.ArrayList"/>
<c:set var="noUse" value="${list.add('YourThing')}"/>
<c:out value="${list}"/>

2
上面的代码不起作用。 以下是需要放置在文件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
OP已经在使用JSTL了,在我的回答中提到它是不必要的。很明显,必须声明taglib才能使标签被解析。此外,您的taglib URI已经过时了,必须在其中加入/jsp - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接