Как использовать jstl foreach непосредственно над значениями карты?
Я попробовал следующее, что на удивление не работает, выглядит как .values вообще не работает в jstl:
<c:forEach var="r" items="${applicationScope['theMap'].values}">
Карта определяется следующим образом (и позже сохраняется в ServletContext):
Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();
Как это сделать? На самом деле я действительно хотел бы избежать изменения того, что внутри цикла foreach.
Ответы
Ответ 1
Итак, вы хотите перебирать значения карт? Map
не имеет метода getValues()
, поэтому ваша попытка не работает. <c:forEach>
возвращает Map.Entry
на каждой итерации, которая, в свою очередь, имеет методы getKey()
и getValue()
. Итак, следующее:
<c:forEach var="entry" items="${theMap}">
Map value: ${entry.value}<br/>
</c:forEach>
Так как EL 2.2, с новой поддержкой для вызова методов без доступа, вы можете просто вызвать Map#values()
напрямую:
<c:forEach var="value" items="${theMap.values()}">
Map value: ${value}<br/>
</c:forEach>
См. также:
Ответ 2
вы можете перебирать карту в jstl, как показано ниже
<c:forEach items="${numMap}" var="entry">
${entry.key},${entry.value}<br/>
</c:forEach>
Ответ 3
Также вы можете использовать этот тип при необходимости
<c:forEach var="key" items="${theMap.keySet()}" varStatus="keyStatus">
<c:set var="value" value="${theMap[key]}" />
</c:forEach>