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 pagetitle>
  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. head>
  19. <body>
  20. <%
  21. //创建Student对象
  22. Student stu1 = new Student(1, "木丁西", '男', 24);
  23. Student stu2 = new Student(2, "小龙女", '女', 14);
  24. Student stu3 = new Student(3, "张馨予", '女', 28);
  25. Student stu4 = new Student(4, "刘先生", '男', 35);
  26. //创建Map集合对象
  27. Map<Long, Student> map = new HashMap();
  28. //添加数据到 Map结合中
  29. map.put(1L, stu1);
  30. map.put(2L, stu2);
  31. map.put(3L, stu3);
  32. map.put(4L, stu4);
  33. //保存集合对象到page域对象中。
  34. pageContext.setAttribute("map", map);
  35. %>
  36. <%-- 使用EL表达式获取Map集合对象 --%>
  37. EL表达式获取集合对象:${map }<br/>
  38. EL表达式获取集合中的第1个对象:${map[1]}<br/>
  39. body>
  40. html>
效果如下:

你可能感兴趣的:(EL表达式取出Map集合中key为Integer类型的值,bug解决方案)