我尝试了以下令人惊讶的不起作用,看起来像.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)