是否可以将值添加到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
答案 0 :(得分:11)
JSTL不是为了做这种事情而设计的。这实际上属于业务逻辑,它直接由servlet类控制。
创建一个类似于:
的servletprotected 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} />