Перебирайте элементы List и Map, используя тег <c: forEach> JSTL - PullRequest
48 голосов
/ 27 января 2010

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

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

Ответы [ 2 ]

112 голосов
/ 27 января 2010

Отметьте, это уже дано в вашей предыдущей теме . Но хорошо, вот оно снова:

Предположим, ${list} указывает на 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 здесь не являются специальными методами или около того. Это на самом деле методы получения объекта Map.Entry (нажмите на синюю ссылку Map.Entry, чтобы увидеть документ API). В EL (язык выражений) вы можете использовать оператор точки . для доступа к методам получения, используя «имя свойства» (имя метода получения без префикса get), все в соответствии со спецификацией Javabean.

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

0 голосов
/ 01 декабря 2016

попробуйте

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

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

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