使用JSTL向arraylist添加值

问题描述 投票:5回答:3

是否可以将值添加到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

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

将其映射到url-pattern/animals

现在在/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。


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>

1
投票

要通过Map,Set等将add()添加到List或其他方法,您必须使用无法使用的变量。]​​>

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

© www.soinside.com 2019 - 2024. All rights reserved.