Подтвердить что ты не робот

Доступ к значению карты в EL с использованием переменной в качестве ключа

У меня есть Map в EL как ${map}, и я пытаюсь получить его значение с помощью ключа, который сам по себе также является переменной EL ${key} со значением "1000".

Использование ${map["1000"]} работает, но ${map["$key"]} не работает. Что я делаю неправильно и как я могу получить значение Map, используя переменную как ключ?

4b9b3361

Ответ 1

$ не является началом имени переменной, он указывает начало выражения. Вы должны использовать ${map[key]} для доступа к свойству key в map map.

Вы можете попробовать его на странице с параметром GET, используя следующую строку запроса, например ?whatEver=something

<c:set var="myParam" value="whatEver"/>
whatEver: <c:out value="${param[myParam]}"/>

Это выведет:

whatEver: something

Смотрите: fooobar.com/tags/el/... и перейдите к разделу "Обозначение скобок".

Ответ 2

Я столкнулся с этой проблемой раньше. Обычно это происходит, когда ключ не является строкой. Исправление состоит в том, чтобы отбросить ключ до строки, прежде чем использовать ключ, чтобы получить значение с карты

Что-то вроде этого:

<c:set var="keyString">${someKeyThatIsNotString}</c:set>

<c:out value="${map[keyString]}"/>

Надеюсь, что поможет

Ответ 3

Вы можете поместить значение ключа в карту на стороне Java и получить доступ к тому же, используя страницу JSTL на JSP, как показано ниже:

Предыдущий java 1.7:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");

Java 1.7 и выше:

Map<String, String> map = new HashMap<>();
map.put("key","value");

JSP Snippet:

<c:out value="${map['key']}"/>

Ответ 4

Я думаю, что вы должны получить доступ к своей карте примерно так:

${map.key}

и проверьте некоторые учебники о jstl, например 1 и 2 (немного устаревший, но все же функциональный)