我尝试了以下令人惊讶的不起作用,看起来像.values在jstl中根本不起作用:
<c:forEach var="r" items="${applicationScope['theMap'].values}">
地图定义如下(后来保存到ServletContext):
Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();
如何让这个工作?我实际上真的想避免修改foreach循环中的内容。
答案 0 :(得分:37)
所以你想迭代地图值? Map
没有getValues()
方法,因此您的尝试不起作用。 <c:forEach>
会在每次迭代时返回Map.Entry
,而后者又有getKey()
和getValue()
种方法。所以应该做到:
<c:forEach var="entry" items="${theMap}">
Map value: ${entry.value}<br/>
</c:forEach>
从EL 2.2开始,新的支持调用非getter方法,你可以直接调用Map#values()
:
<c:forEach var="value" items="${theMap.values()}">
Map value: ${value}<br/>
</c:forEach>
答案 1 :(得分:9)
您可以在jstl中迭代地图,如下所示
<c:forEach items="${numMap}" var="entry">
${entry.key},${entry.value}<br/>
</c:forEach>
答案 2 :(得分:2)
如果需要,您也可以使用此类型
<c:forEach var="key" items="${theMap.keySet()}" varStatus="keyStatus">
<c:set var="value" value="${theMap[key]}" />
</c:forEach>