在JSP中按变量访问hashmap值

时间:2011-01-25 10:37:52

标签: jsp hashmap el

我有一个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变量访问hashmap的值?

3 个答案:

答案 0 :(得分:4)

在EL中,数字被视为Long。将您的Map更改为Map<Long, String>即可。

答案 1 :(得分:3)

我认为bean的 id 属性不是包装器对象(Integer id;)。请查看Map的文档页面。

来自JavaDoc的文字

  

注意:如果,必须非常小心   可变对象用作映射键。   未指定地图的行为   如果对象的值发生了变化   以一种影响平等的方式   比较,而对象是一个关键   在地图上。这是一个特例   禁止是它不是   允许地图包含   本身作为关键。虽然它是   允许地图包含   作为一种价值,极端谨慎   建议:equals和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 :(得分:2)

您可以将键值放在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']}"/>