`
Copperfield
  • 浏览: 260990 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:25211
社区版块
存档分类

JSTL-map中key值为数字的处理方式

 
阅读更多

最好显示转化成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>

 

 

分享到:
评论
2 楼 huang_yong 2012-08-11  
或者这样:

${boardMap[boardKey + '']}
1 楼 huang_yong 2012-08-11  
假如 boardKey 是 int 型,可以这样做:

${boardMap[boardKey + 0]}

就可以输出了!

相关推荐

    jstl读取map.txt

    根据提供的文件信息,本文将详细解释如何使用JSTL(JavaServer Pages Standard Tag Library)来读取并处理一个名为`map.txt`的文件中的数据。这里主要关注的是如何利用JSTL中的`&lt;c:forEach&gt;`标签来遍历一个`java....

    jstl-quick-reference.pdf

    - **键值对方式访问**:通过中括号和键名来访问Map类型的属性,如 `bean.property["key"]`。 #### 四、内置对象 JSTL提供了一系列内置对象,这些对象可以方便地获取到上下文中的数据,包括但不限于: - **...

    jstl中判断list中是否包含某个值的简单方法.docx

    jstl判断list中是否包含某个值的简单方法 jstl(JavaServer Pages Standard Tag Library)是 Java web 开发中的一种常用标签库,用于简化 JSP 页的编程。jstl 中判断 list 中是否包含某个值是开发中常见的问题,...

    jstl对集合操作大全-个人整理

    在下面的示例中,`var`设为`aaa`,然后分别设置`key`和`book`变量来获取键和值,以便进一步处理。 ```html ${table}" var="aaa"&gt; &lt;c:set var="key" value="${aaa.key}" /&gt; ${aaa.value}" /&gt; ${key }=${book }...

    在jsp中使用JSTL跟El表达式访问和遍历Map集合

    在JavaServer Pages (JSP)开发中,JSTL(Java...总之,JSTL和EL是JSP开发中的重要工具,它们极大地提升了代码的清晰度和效率,尤其是在处理集合数据,如Map时。理解并熟练掌握这两者,对于提升JSP应用的质量至关重要。

    jstl之map,list访问遍历以及el表达式map取值的实现

    在JSTL中,处理集合数据如Map和List是非常常见的需求。本篇文档详细介绍了如何在JSTL中遍历Map和List,并通过EL表达式访问和取值。 首先,让我们了解一下JSTL的基本概念。JSTL定义了几种标签库,如核心标签库、格式...

    jstl EL表达式遍历Map的方法

    在这个示例中,`${not empty item.value}`检查Map中的值是否不为空,如果不为空则进一步遍历这个值(假设为List)。通过这种方式,可以逐层遍历复杂的嵌套集合。 ### 结论 JSTL EL表达式提供了强大而便捷的方式来...

    详解javaweb中jstl如何循环List中的Map数据

    这两种方式展示了如何灵活运用JSTL的标签来处理List中的Map数据。通过它们,开发者可以更加方便地在JSP页面中展示复杂的数据结构。同时,这种方式也使得代码更加清晰易读,便于维护。 需要注意的是,上述代码中的"C...

    jstl 遍历_jstl遍历_源码.zip

    对于Map,`&lt;c:forEach&gt;`会遍历键值对,`var`属性可以分别设置为`key`或`value`来访问键或值。若要同时访问键和值,可以使用`varStatus`属性创建一个迭代状态对象。例如: ```jsp ${map}" var="entry" varStatus=...

    jstl 使用文档方便你快速入门 ,能够快速上手使用JSTL技术.pdf

    4. **遍历Map, User&gt;**:对于Map的键值对,如果值是复杂类型,可以分别处理: ```jsp ${map}" var="entry"&gt; 键:${entry.key},用户ID:${entry.value.id},用户名:${entry.value.name} ``` ### 四、其他...

    jstl实例与使用总结

    在 JSTL 中,EL(Expression Language)表达式是一种用于获取 JavaBeans 属性值、访问数组或集合元素等的强大工具。EL 表达式的使用极大地减少了 JSP 页面中的脚本代码,使得页面更加清晰。 **示例:** 1. **算术...

    JSTL入门教程

    JSTL的XML标签库允许我们在JSP中处理XML文档。例如,`&lt;x:parse&gt;`标签用于解析XML字符串,`&lt;x:out&gt;`用于输出XML节点内容。 ```jsp &lt;c:set var="xmlData" value="&lt;book&gt;&lt;title&gt;Java Programming&lt;/title&gt;&lt;/book&gt;" /&gt; $...

    jstl中判断list中是否包含某个值的简单方法

    如果当前遍历到的元素(通过map.key来访问)等于我们要查找的值(在这个例子中是device[0]),那么变量iscontain被赋值为true。 最终,根据iscontain变量的值,页面上会显示不同的图像,从而向用户反馈该值是否被...

    JSTL标签实例

    - 遍历Map:`${map}" var="entry"&gt;${entry.key} - ${entry.value}"/&gt;&lt;/c:forEach&gt;` - 使用开始和结束索引:`${i}&lt;/c:forEach&gt;` 通过这样的实例,开发者能够更好地理解和掌握每个JSTL标签的具体使用方法及其属性,...

    09_尚硅谷_EL表达式&JSTL标签库_王振国 - 课堂笔记.pdf

    - 对于Map集合属性,EL表达式可以输出整个Map对象,也可以输出Map中指定key的值,比如${p.map.key3}。 **EL表达式运算语法:** - EL表达式支持关系运算符(==或eq、!=或ne、&lt;或lt、&gt;或gt、或le、&gt;=或ge),逻辑...

    在JSTL EL中处理java.util.Map,及嵌套List的情况

    例如,表达式`${map['key']}`会返回与`map`引用的Map中键为`'key'`的值。 在使用`&lt;c:forEach&gt;`标签遍历Map时,我们可以设置`var`属性为`entry`,这样每次迭代都会将当前`Map.Entry`对象赋值给`entry`。`Map.Entry`...

    JSTL、EL、ONGL、Struts标签的区别

    JSTL 的设计目标是为了提供一种更加简洁、易于维护的方式来处理常见的 Web 开发任务。 **运行环境**: JSTL 需要在支持 JSP 1.2 和 Servlet 2.3 规范的容器上运行,例如 Tomcat 4.x 版本。在 JSP 2.0 中,JSTL 成为...

Global site tag (gtag.js) - Google Analytics