Iteracja elementów listy i mapy za pomocą tagu JSTL

Jeśli mam JSF backing bean zwróci obiekt typu ArrayList, powinienem być w stanie użyć <c:foreach> do iteracji elementów na liście. Każdy element zawiera mapę i chociaż odpowiedź na pytanie, jak uzyskać dostęp do zawartości mapy przez JSTL została udzielona tutaj, Jeśli przekażę tablicę takich Map, nie mogę znaleźć sposobu ich iteracji i nadal uzyskać dostęp do zawartości mapy za pomocą JSTL. Jest dokumentacja, która odnosi się do prostych iteratorów, ale nie do tych, których elementy są same w sobie mapy.

Jeśli ktoś mógłby mi podać prosty przykład, jak lista Javy jest iterowana w JSP, byłbym ogromnie wdzięczny. Mark

Author: Community, 2010-01-27

2 answers

Mark, to już jest odpowiedź w Twoim poprzednim temacie. Ale OK, znowu to samo:

Przypuśćmy, że ${list} wskazuje na List<Object>, wtedy następujące

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

Robi w zasadzie to samo co w "normalnej Javie":

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

Jeśli zamiast tego masz List<Map<K, V>>, to następujące

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

Robi w zasadzie to samo co w "normalnej Javie":

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

key i value nie są tutaj specjalnymi metodami. Są faktycznie metody gettera Map.Entry obiekt (kliknij niebieski link Map.Entry, aby zobaczyć dokument API). W języku El (Expression Language) można użyć operatora . Dot, aby uzyskać dostęp do metod getter używając "property name" (nazwa metody getter bez prefiksu get), wszystko zgodnie ze specyfikacją Javabean.

To powiedziawszy, naprawdę musisz oczyścić "odpowiedzi" w poprzednim temacie, ponieważ dodają hałas do pytania. Przeczytaj również komentarze, które zamieściłem w Twoich "odpowiedziach".

 98
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:27

Spróbuj tego

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

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

        </c:forEach>
    </tr>
</c:forEach>
 0
Author: Prateek RG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 10:38:07