Как получить доступ к HashMap <Integer, ArrayList <Integer>> в JSTL, используя динамические ключи? - PullRequest
0 голосов
/ 19 июня 2019

Я хочу получить доступ к HashMap<Integer, ArrayList<Integer>> по ключу в цикле в JSTL, но метод, который я попробовал, не работает.

Есть два метода, которые я попробовал, и хотя первый работает, он не использует цель использования HashMap.Я хочу иметь возможность получить доступ к значению, используя ключ напрямую.

<%
HashMap<Integer, ArrayList<Integer>> LocationLevels = 
levelManagementBean.getLocationLevels((Integer) 
session.getAttribute("NodeId"), (String) 
session.getAttribute("NodeName"));

pageContext.setAttribute("LocationLevels", LocationLevels);
%>

<c:forEach items="${LocationLevels}" var="elem">
    <c:if test="${elem.key == 9}">
        <c:forEach items="${elem.value}" var="levs">
            <c:out value="${levs}"/>
        </c:forEach>
    </c:if>
</c:forEach>

<br>

<c:set var="temp" value="9"/>
<c:forEach var="elem" items="${LocationLevels[temp]}">
    <c:out value="${elem}"/>
</c:forEach>

LocationLevels - это HashMap, возвращаемый функцией Bean.Первые две строки кода находятся в тегах скриптлета (я знаю, что это не лучшая практика, но из-за некоторых ограничений я стараюсь, чтобы HashMap получал одинаковую часть при преобразовании всех остальных частей страницы JSP в JSTL).Функция getLocationLevels возвращает HashMap в требуемом формате, это гарантировано (потому что ранее у меня был Java-код в скриптлетах, который работал).

Предположим, я хочу получить доступ к ArrayList, хранящемуся в HashMap, который соответствует ключу 9. Первый цикл <c:forEach> работает, но второй - нет, и я не могу понять, почему.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 июня 2019

В вашем конкретном случае, $ {entry.value} на самом деле является списком, поэтому вам нужно итерировать по нему:

    <c:forEach var="entry" items="${LocationLevels}">
        <c:if test="${entry.key == '9'}">
            <c:out value="${entry.value}"/>
            <c:set var="tempList" value="${entry.value}"/>
        </c:if>                                      
    </c:forEach>
    <c:forEach var="elem" items='${tempList}'>
        <c:out value="${elem}"/>
    </c:forEach>
...