EL表达式取出Map集合中key为Integer类型的值,bug解决方案

EL表达式取出Map集合中key为Integer类型的值,bug解决方案

    今天,我在用EL表达式取Map集合中key为Integer类型的值时,发现无法取出。
    问题 Demo如下:
   
   
  1. <body>
  2. <%
  3. //创建Student对象
  4. Student stu1 = new Student(1, "木丁西", '男', 24);
  5. Student stu2 = new Student(2, "小龙女", '女', 14);
  6. Student stu3 = new Student(3, "张馨予", '女', 28);
  7. Student stu4 = new Student(4, "刘先生", '男', 35);
  8. //创建Map集合对象
  9. Map<Integer, Student> map = new HashMap();
  10. //添加数据到 Map结合中
  11. map.put(1, stu1);
  12. map.put(2, stu2);
  13. map.put(3, stu3);
  14. map.put(4, stu4);
  15. //保存集合对象到page域对象中。
  16. pageContext.setAttribute("map", map);
  17. %>
  18. <%-- 使用EL表达式获取Map集合对象 --%>
  19. EL表达式获取集合对象:${map }<br/>
  20. EL表达式获取集合中的第1个对象:${map[1]}<br/>
  21. </body>
效果:

原因分析:
     从网上链接1: http://www.codeweblog.com/el%E8%A1%A8%E8%BE%BE%E5%BC%8Fmap-key%E4%B8%BAinteger%E7%B1%BB%E5%9E%8B-%E5%8F%96%E5%80%BCbug%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/  链接2:http://stackoverflow.com/questions/924451/el-access-a-map-value-by-integer-key 获知。EL表达式在解析Integer类型数字的时候,会自动把数字转换成Long类型,后台使用Integer类型作为key值,进行判断的时候Integer与Long对象不相等。导致无法取出key值。

解决方案:使用Long类型作为Map中的键值类型。
Demo如下:
   
   
  1.  <%@ page language="java" import="java.util.*, com.cn.entity.Student" pageEncoding="UTF-8"
  2. session="true"
  3. %>
  4. <%
  5. String path = request.getContextPath();
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  7. %>
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12. <title>My JSP 'el.jsp' starting page</title>
  13. <meta http-equiv="pragma" content="no-cache">
  14. <meta http-equiv="cache-control" content="no-cache">
  15. <meta http-equiv="expires" content="0">
  16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  17. <meta http-equiv="description" content="This is my page">
  18. <!--
  19. <link rel="stylesheet" type="text/css" href="styles.css">
  20. -->
  21. </head>
  22. <body>
  23. <%
  24. //创建Student对象
  25. Student stu1 = new Student(1, "木丁西", '男', 24);
  26. Student stu2 = new Student(2, "小龙女", '女', 14);
  27. Student stu3 = new Student(3, "张馨予", '女', 28);
  28. Student stu4 = new Student(4, "刘先生", '男', 35);
  29. //创建Map集合对象
  30. Map<Long, Student> map = new HashMap();
  31. //添加数据到 Map结合中
  32. map.put(1L, stu1);
  33. map.put(2L, stu2);
  34. map.put(3L, stu3);
  35. map.put(4L, stu4);
  36. //保存集合对象到page域对象中。
  37. pageContext.setAttribute("map", map);
  38. %>
  39. <%-- 使用EL表达式获取Map集合对象 --%>
  40. EL表达式获取集合对象:${map }<br/>
  41. EL表达式获取集合中的第1个对象:${map[1]}<br/>
  42. </body>
  43. </html>
效果如下:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值