最好显示转化成Long型:
boardMap.put((Long)b.getId(), bclist);
如果写成boardMap.put(b.getId()+"", bclist);
页面上写成
<c:set var="boardKey" value="${board.id}"/>
<c:forEach items="${boardMap[boardKey]}" var="boardItem">
<img id="img${boardItem.id}" src="<c:url value='images/node.gif'/>" alt="" align="absmiddle"/><a href="<c:out value='/forum/${board.id}'/>">${boardItem.boardName}</a>
</c:forEach>
如果boardKey等于1
循环中是不会有输出的,因为JSTL会将作为1处理,而不是"1".
参考http://stackoverflow.com/questions/924451/jstl-access-a-map-value-by-key
Basically autoboxing puts an Integer object into the Map. ie:
map.put(new Integer(0), "myValue")
EL (Expressions Languages) evaluates 0 as a Long and thus goes looking for a Long as the key in the map. ie it evaluates:
map.get(new Long(0))
As a Long is never equal to an Integer object, it does not find the entry in the map. Thats it in a nutshell.
EL uses the following wrappers:
Terms Description Type
null null value. -
123 int value. java.lang.Long
123.00 real value. java.lang.Double
"string" ou 'string' string. java.lang.String
true or false boolean. java.lang.Boolean
JSP page demonstrating this:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="java.util.*" %>
<h2> Server Info</h2>
Server info = <%= application.getServerInfo() %> <br>
Servlet engine version = <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %><br>
Java version = <%= System.getProperty("java.vm.version") %><br>
<%
Map map = new LinkedHashMap();
map.put("2", "String(2)");
map.put(new Integer(2), "Integer(2)");
map.put(new Long(2), "Long(2)");
map.put(42, "AutoBoxedNumber");
pageContext.setAttribute("myMap", map);
Integer lifeInteger = new Integer(42);
Long lifeLong = new Long(42);
%>
<h3>Looking up map in JSTL - integer vs long </h3>
This page demonstrates how JSTL maps interact with different types used for keys in a map.
Specifically the issue relates to autoboxing by java using map.put(1, "MyValue") and attempting to display it as ${myMap[1]}
The map "myMap" consists of four entries with different keys: A String, an Integer, a Long and an entry put there by AutoBoxing Java 5 feature.
<table border="1">
<tr><th>Key</th><th>value</th><th>Key Class</th></tr>
<c:forEach var="entry" items="${myMap}" varStatus="status">
<tr>
<td>${entry.key}</td>
<td>${entry.value}</td>
<td>${entry.key.class}</td>
</tr>
</c:forEach>
</table>
<h4> Accessing the map</h4>
Evaluating: ${"${myMap['2']}"} = <c:out value="${myMap['2']}"/><br>
Evaluating: ${"${myMap[2]}"} = <c:out value="${myMap[2]}"/><br>
Evaluating: ${"${myMap[42]}"} = <c:out value="${myMap[42]}"/><br>
<p>
As you can see, the EL Expression for the literal number retrieves the value against the java.lang.Long entry in the map.
Attempting to access the entry created by autoboxing fails because a Long is never equal to an Integer
<p>
lifeInteger = <%= lifeInteger %><br/>
lifeLong = <%= lifeLong %><br/>
lifeInteger.equals(lifeLong) : <%= lifeInteger.equals(lifeLong) %> <br>
分享到:
相关推荐
根据提供的文件信息,本文将详细解释如何使用JSTL(JavaServer Pages Standard Tag Library)来读取并处理一个名为`map.txt`的文件中的数据。这里主要关注的是如何利用JSTL中的`<c:forEach>`标签来遍历一个`java....
- **键值对方式访问**:通过中括号和键名来访问Map类型的属性,如 `bean.property["key"]`。 #### 四、内置对象 JSTL提供了一系列内置对象,这些对象可以方便地获取到上下文中的数据,包括但不限于: - **...
jstl判断list中是否包含某个值的简单方法 jstl(JavaServer Pages Standard Tag Library)是 Java web 开发中的一种常用标签库,用于简化 JSP 页的编程。jstl 中判断 list 中是否包含某个值是开发中常见的问题,...
在下面的示例中,`var`设为`aaa`,然后分别设置`key`和`book`变量来获取键和值,以便进一步处理。 ```html ${table}" var="aaa"> <c:set var="key" value="${aaa.key}" /> ${aaa.value}" /> ${key }=${book }...
在JavaServer Pages (JSP)开发中,JSTL(Java...总之,JSTL和EL是JSP开发中的重要工具,它们极大地提升了代码的清晰度和效率,尤其是在处理集合数据,如Map时。理解并熟练掌握这两者,对于提升JSP应用的质量至关重要。
在JSTL中,处理集合数据如Map和List是非常常见的需求。本篇文档详细介绍了如何在JSTL中遍历Map和List,并通过EL表达式访问和取值。 首先,让我们了解一下JSTL的基本概念。JSTL定义了几种标签库,如核心标签库、格式...
这两种方式展示了如何灵活运用JSTL的标签来处理List中的Map数据。通过它们,开发者可以更加方便地在JSP页面中展示复杂的数据结构。同时,这种方式也使得代码更加清晰易读,便于维护。 需要注意的是,上述代码中的"C...
对于Map,`<c:forEach>`会遍历键值对,`var`属性可以分别设置为`key`或`value`来访问键或值。若要同时访问键和值,可以使用`varStatus`属性创建一个迭代状态对象。例如: ```jsp ${map}" var="entry" varStatus=...
4. **遍历Map, User>**:对于Map的键值对,如果值是复杂类型,可以分别处理: ```jsp ${map}" var="entry"> 键:${entry.key},用户ID:${entry.value.id},用户名:${entry.value.name} ``` ### 四、其他...
在这个示例中,`${not empty item.value}`检查Map中的值是否不为空,如果不为空则进一步遍历这个值(假设为List)。通过这种方式,可以逐层遍历复杂的嵌套集合。 ### 结论 JSTL EL表达式提供了强大而便捷的方式来...
在 JSTL 中,EL(Expression Language)表达式是一种用于获取 JavaBeans 属性值、访问数组或集合元素等的强大工具。EL 表达式的使用极大地减少了 JSP 页面中的脚本代码,使得页面更加清晰。 **示例:** 1. **算术...
JSTL的XML标签库允许我们在JSP中处理XML文档。例如,`<x:parse>`标签用于解析XML字符串,`<x:out>`用于输出XML节点内容。 ```jsp <c:set var="xmlData" value="<book><title>Java Programming</title></book>" /> $...
如果当前遍历到的元素(通过map.key来访问)等于我们要查找的值(在这个例子中是device[0]),那么变量iscontain被赋值为true。 最终,根据iscontain变量的值,页面上会显示不同的图像,从而向用户反馈该值是否被...
- 遍历Map:`${map}" var="entry">${entry.key} - ${entry.value}"/></c:forEach>` - 使用开始和结束索引:`${i}</c:forEach>` 通过这样的实例,开发者能够更好地理解和掌握每个JSTL标签的具体使用方法及其属性,...
- 对于Map集合属性,EL表达式可以输出整个Map对象,也可以输出Map中指定key的值,比如${p.map.key3}。 **EL表达式运算语法:** - EL表达式支持关系运算符(==或eq、!=或ne、<或lt、>或gt、或le、>=或ge),逻辑...
例如,表达式`${map['key']}`会返回与`map`引用的Map中键为`'key'`的值。 在使用`<c:forEach>`标签遍历Map时,我们可以设置`var`属性为`entry`,这样每次迭代都会将当前`Map.Entry`对象赋值给`entry`。`Map.Entry`...
JSTL 的设计目标是为了提供一种更加简洁、易于维护的方式来处理常见的 Web 开发任务。 **运行环境**: JSTL 需要在支持 JSP 1.2 和 Servlet 2.3 规范的容器上运行,例如 Tomcat 4.x 版本。在 JSP 2.0 中,JSTL 成为...