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

Yve*_*ves 11 jsp jstl

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

<c:forEach var="r" items="${applicationScope['theMap'].values}">
Run Code Online (Sandbox Code Playgroud)

映射定义如下(以后保存到ServletContext):

Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 37

所以你想迭代地图值?Map没有getValues()方法,所以你的尝试不起作用.在<c:forEach>给出了一个Map.Entry在每个迭代上这反过来又回来getKey()getValue()方法.所以以下应该做:

<c:forEach var="entry" items="${theMap}">
    Map value: ${entry.value}<br/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

从EL 2.2开始,新的支持调用非getter方法,你可以直接调用Map#values():

<c:forEach var="value" items="${theMap.values()}">
    Map value: ${value}<br/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

也可以看看:


小智 9

您可以在jstl中迭代地图,如下所示

<c:forEach items="${numMap}" var="entry">
  ${entry.key},${entry.value}<br/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)