Итерация над элементами списка и карты с использованием тега JSTL <c: forEach>

Если у меня есть поддержка JSF bean, возвращаю объект типа ArrayList, я должен использовать <c:foreach> для перебора элементов в списке. Каждый элемент содержит карту, и хотя вопрос о том, как получить доступ к содержимому карты через JSTL, ответил на здесь, если я передаю массив таких карт, я не могу найти, как перебирать их и по-прежнему получать доступ к содержимому карты с помощью JSTL. Там документация, которая относится к простым итераторам, но не к тем, чьи элементы сами карты.

Если кто-нибудь может дать мне простой пример того, как java-список переименован в JSP, я был бы очень благодарен. Марк

Ответ 1

Отметьте, об этом уже ответили в предыдущем разделе. Но ОК, здесь это снова:

Предположим, что ${list} указывает на a List<Object>, а затем

<c:forEach items="${list}" var="item">
    ${item}<br>
</c:forEach>

делает в основном то же самое, что и в "нормальной Java":

for (Object item : list) {
    System.out.println(item);
}

Если у вас есть List<Map<K, V>>, тогда

<c:forEach items="${list}" var="map">
    <c:forEach items="${map}" var="entry">
        ${entry.key}<br>
        ${entry.value}<br>
    </c:forEach>
</c:forEach>

делает в основном то же самое, что и в "нормальной Java":

for (Map<K, V> map : list) {
    for (Entry<K, V> entry : map.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    }
}

key и value здесь не специальные методы или так. Это на самом деле методы getter Map.Entry object (нажмите на синюю ссылку Map.Entry, чтобы увидеть документ API). В EL (язык выражений) вы можете использовать оператор . dot для доступа к методам getter с использованием имени свойства (имя метода getter без префикса get), все только по спецификации Javabean.

Тем не менее, вам действительно нужно очистить "ответы" в предыдущей теме, поскольку они добавляют шум к вопросу. Также прочитайте комментарии, которые я разместил в ваших "ответах".

Ответ 2

попробуйте это

<c:forEach items="${list}" var="map">
    <tr>
        <c:forEach items="${map}" var="entry">

            <td>${entry.value}</td>

        </c:forEach>
    </tr>
</c:forEach>