我有一个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的值?
答案 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']}"/>