在JSP中通过变量访问hashmap值

在JSP中通过变量访问hashmap值,jsp,hashmap,el,Jsp,Hashmap,El,我有一个hashmap,它被放在请求中: HashMap<Integer, String> myMap = ... request.setAttribute("myMap", myMap); HashMap myMap=。。。 setAttribute(“myMap”,myMap); 在JSP中,我有一个foreach循环 <c:forEach items="${list}" var="item" varStatus="status"> <c:out va

我有一个hashmap,它被放在请求中:

HashMap<Integer, String> myMap = ...
request.setAttribute("myMap", myMap);
HashMap myMap=。。。
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的值?

在EL中,数字被视为
长的
。将您的
Map
更改为
Map
,它就会工作。

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

来自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>

您可以将键值放在
Java
侧的映射中,并使用
JSP
页面上的
JSTL
访问相同的键值,如下所示:

先前的java 1.7:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");
Map<String, String> map = new HashMap<>();
map.put("key","value");
<c:out value="${map['key']}"/>
Map Map=newhashmap();
地图放置(“键”、“值”);
Java1.7及以上版本:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");
Map<String, String> map = new HashMap<>();
map.put("key","value");
<c:out value="${map['key']}"/>
Map Map=newhashmap();
地图放置(“键”、“值”);
JSP代码片段:

Map<String, String> map = new HashMap<String, String>();
map.put("key","value");
Map<String, String> map = new HashMap<>();
map.put("key","value");
<c:out value="${map['key']}"/>

HashMap是否有特殊情况,因为我尝试了这个
${applicationscope.coursesHT[anotherbean.courseC]}
来获取课程描述,但它不起作用,但当我使用
c:set
c:out
时,它起作用了!!:)谢谢