Как использовать 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>