如何直接在地图的值上使用jstl foreach?

时间:2011-05-28 21:51:43

标签: jsp jstl

我尝试了以下令人惊讶的不起作用,看起来像.values在jstl中根本不起作用:

<c:forEach var="r" items="${applicationScope['theMap'].values}">

地图定义如下(后来保存到ServletContext):

Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();

如何让这个工作?我实际上真的想避免修改foreach循环中的内容。

3 个答案:

答案 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>