Доступ к значению хеш-карты по переменной в JSP - PullRequest
5 голосов
/ 25 января 2011

У меня есть hashmap, который ставится на запрос:

HashMap<Integer, String> myMap = ...
request.setAttribute("myMap", myMap);

В JSP у меня есть цикл foreach

<c:forEach items="${list}" var="item" varStatus="status">
   <c:out value="${item.description}"/>
   <c:out value="${myMap[item.id]}"/>
</c:forEach>

но ${myMap[item.id]} не работает. Как я могу получить доступ к значению хэш-карты по item.id переменной?

Ответы [ 3 ]

4 голосов
/ 25 января 2011

В EL числа рассматриваются как Long.Измените Map на Map<Long, String>, и оно будет работать.

3 голосов
/ 25 января 2011

Я думаю, что атрибут id bean-компонентов не является объектом-оболочкой (Integer id;). Посмотрите на странице документа Карта .

Текст из JavaDoc

Примечание: следует проявлять большую осторожность, если изменяемые объекты используются в качестве ключей карты. Поведение карты не указано если значение объекта изменилось таким образом, что влияет на равных сравнения в то время как объект является ключевым на карте. Особый случай этого Запрет состоит в том, что это не допустимо для карты, чтобы содержать сам как ключ. Пока это допустимо для карты, чтобы содержать само по себе как ценность, крайняя осторожность посоветовал: равно и hashCode методы больше не определены такая карта.

Item.java

package com.me;

public class Item {
    private Integer id;
    private String description;

    public Item() {
    }

    public Item(Integer id, String description) {
        this.id = id;
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

}

Фрагмент JSP

<%
HashMap<Integer, String> myMap = new HashMap<Integer, String>();
myMap.put(new Integer(1), "One");
myMap.put(new Integer(2), "Two");
myMap.put(new Integer(3), "Three");
request.setAttribute("myMap", myMap);

List<com.me.Item> list=new ArrayList<com.me.Item>();
list.add(new com.me.Item(1,"A - Desc"));
list.add(new com.me.Item(2,"B - Desc"));
list.add(new com.me.Item(3,"C - Desc"));
request.setAttribute("list", list);
%>

<c:forEach items="${list}" var="item" varStatus="status">
  <c:out value="${item.description}"/>
  <c:out value="${myMap[item.id]}"/>
</c:forEach>
2 голосов
/ 23 июля 2014

Вы можете поместить значение ключа на карту на стороне 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:

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