jsp EL表达式中令人郁闷的int/float/char

编程技术  /  houtizong 发布于 3年前   54

在EL表达式计算过程中,有朋友会遇到许多奇怪的问题,经常非常郁闷,在此我把这些总结一下,方便查询:

1、所有的整数数字字面量都是Long类型的;

2、所有小数字面量都是Double类型的;

3、""或''声明的是字符串,即''也是字符串,非char;

4、比较时都是equals比较。

 

接下来看几个可能出问题的例子,你会遇到一下的几个呢:

1、

如${1+2147483647} 结果是多少?

如果在java程序里边运行会得到-2147483648,而在jsp el中会得到2147483648。

 

2、

<%

    Map<Object, Object> map = new HashMap<Object, Object>();

    map.put(new Long(1), 123);

    request.setAttribute("map", map);

    request.setAttribute("a", new Long(1));

%>

${map[1]}  正确

${map[a]} 正确

 

3、

<%

    Map<Object, Object> map = new HashMap<Object, Object>();

    map.put(new Integer(1), 123);

    request.setAttribute("map", map);

    request.setAttribute("a", new Long(1));

    request.setAttribute("b", new Integer(1));

%>

${map[1]}  错误

${map[a]}  错误

${map[b]}  正确

 

4、

<%

    Map<Object, Object> map = new HashMap<Object, Object>();

    map.put(1.1, 123); //map.put(1.1d, 123);

    request.setAttribute("map", map);

    request.setAttribute("a", new Double(1.1));

%>

map.a=${map[1.1]}  正确

map.a=${map[a]}     正确

 

5、

<%

    Map<Object, Object> map = new HashMap<Object, Object>();

    map.put(1.1f, 123); //map.put(new Float(1.1), 123);

    request.setAttribute("map", map);

    request.setAttribute("a", new Double(1.1));

    request.setAttribute("b", new Float(1.1));

%>

map.a=${map[1.1]}  错误

map.a=${map[a]}     错误

map.a=${map[b]}     正确

 

6、

结合struts2的ognl表达式

<s:property value="#map = #{'a':123, 'b':234}, ''"/>  --->定义一个map,放入值栈的上下文区

<s:property value="#map['a']"/> ---------->正确,因为其支持char

${map['a']} ------------>错误, 因为'a'在jsp el表达式中是字符串,不能=char。

 

<s:property value='#map = #{"a":123, "b":234}, ""'/>  --->此时key是字符串

${map['a']}

 

此处需要注意ognl中'×××' 如果长度是1那么是Character 否则是String 可参考

http://jinnianshilongnian.iteye.com/blog/1870662

 

补充:

在EL表达式规范2.2中,定义了:

写道

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客