У меня есть такая карта,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
Теперь я должен повторить эту карту, а затем ArrayList внутри карты. Как это сделать с помощью JSTL?
У меня есть такая карта,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
Теперь я должен повторить эту карту, а затем ArrayList внутри карты. Как это сделать с помощью JSTL?
Вы можете использовать JSTL <c:forEach>
, чтобы перебрать массивов, коллекций и карт.
В случае массивов и коллекций каждая итерация var
сразу выдает вам только тот итеративный элемент.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${collectionOrArray}" var="item">
Item = ${item}<br>
</c:forEach>
В случае карт каждая итерация var
даст вам объект Map.Entry
, который, в свою очередь, имеет getKey()
и getValue()
.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${map}" var="entry">
Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>
В вашем конкретном случае ${entry.value}
на самом деле является List
, поэтому вам нужно также перебирать его:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${map}" var="entry">
Key = ${entry.key}, values =
<c:forEach items="${entry.value}" var="item" varStatus="loop">
${item} ${!loop.last ? ', ' : ''}
</c:forEach><br>
</c:forEach>
varStatus
существует только для удобства;)
Чтобы лучше понять, что здесь происходит, вот простой перевод на Java:
for (Entry<String, List<Object>> entry : map.entrySet()) {
out.print("Key = " + entry.getKey() + ", values = ");
for (Iterator<Object> iter = entry.getValue().iterator(); iter.hasNext();) {
Object item = iter.next();
out.print(item + (iter.hasNext() ? ", " : ""));
}
out.println();
}
Вы попробовали что-то вроде этого?
<c:forEach var='item' items='${map}'>
<c:forEach var='arrayItem' items='${item.value}' />
...
</c:forEach>
</c:forEach>
вы не закрыли c tag.try out
<c:forEach items="${logMap}" var="entry">
Key = ${entry.key}, values =
<c:forEach items="${entry.value}" var="item" varStatus="loop">
${item} ${!loop.last ? ', ' : ''}
</c:forEach><br>
</c:forEach>
Вы можете также циклически объединять только map.value, если знаете ключ
<c:forEach var="value" items="${myMap[myObject.someInteger]}">
${value}
</c:forEach>