是否可以将值添加到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 <set>: "null"
thx
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。
上面的代码不起作用。
以下是必须放置在文件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>
要通过Map,Set等将add()添加到List或其他方法,您必须使用无法使用的变量。]>
<jsp:useBean id="list" class="java.util.ArrayList"/>
<c:set var="noUse" value="${list.add('YourThing')}"/>
<c:out value=${list} />