Доступ к содержимому Map <Long, Map <String, Object >> в jsp с использованием значения ключа - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть страница JSP, которая получает объект HashMap этого типа: Map<Long, Map<String, Object>>.

Пример этой карты:
foo = {1 = {id=1, response="someText"}, 2={id=99, response="random"}};

Я пытаюсь перебрать содержимое обеих карт в foo следующим образом:

<c:forEach items="${fooMap.content}" var="outerMap">
    <c:forEach items="${outerMap.value}" var = "innerMap">
        <p>${innerMap.response}</p>
    </c:foreach>
</c:forEach>

Но это выдает "Свойство 'response', не найденное для типа java.util.HashMap ..... Кто-нибудь, пожалуйста, скажите мне, что я делаю не так?

Я знаю, что могу получить доступ к содержимому innerMap с помощью Map.EntrySet. Но я хочу получить доступ к значению, используя определенные ключи.

1 Ответ

2 голосов
/ 22 сентября 2011

${outerMap.value} возвращает Map<String, Object>, из которых одна запись имеет "ответ" в качестве ключа.Таким образом, вам нужно получить его прямо оттуда, вместо того, чтобы перебирать его набор записей в ${innerMap}.

<c:forEach items="${fooMap.content}" var="outerMap">
    <p>${outerMap.value.response}</p>
</c:forEach>

(Более неуклюже) альтернатива проверяет ключ ввода ${innerMap}:

<c:forEach items="${fooMap.content}" var="outerMap">
    <c:forEach items="${outerMap.value}" var="innerMap">
        <c:if test="${innerMap.key == 'response'}">
            <p>${innerMap.value}</p>
        </c:if>
    </c:foreach>
</c:forEach>

Можете ли вы все еще обернуть голову вокруг этого?:)

...