Доступ к значению карты в EL с использованием переменной в качестве ключа
У меня есть Map
в EL как ${map}
, и я пытаюсь получить его значение с помощью ключа, который сам по себе также является переменной EL ${key}
со значением "1000"
.
Использование ${map["1000"]}
работает, но ${map["$key"]}
не работает. Что я делаю неправильно и как я могу получить значение Map
, используя переменную как ключ?
Ответы
Ответ 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 (немного устаревший, но все же функциональный)