el表达式string强制转换成long报错

1 篇文章 0 订阅

今天在项目中遇到一个奇怪的bug,在jsp页面使用el表达式遍历后台传过来的集合,页面显示是一片空白!查看错误日志才发现报了个错:

javax.servlet.jsp.el.ELException: An exception occured trying to convert String "12341111111111111111" to type "java.lang.Long",意思就是string转换long时出错了,"12341111111111111111"的长度有20,而long类型最大长度为19!但是我封装的后台数据明明是string类型的,凭啥给我转成long类型?

查了下资料才发现,原来使用el表达式时,为了提高开发效率,tomcat会自动将基本数据类型强转成对应的对象,也就是装箱,此时的'12341111111111111111'虽然定义成string类型,但js是弱类型语言,所以直接当成long类型转换了,于是就发生现在所遇到的问题!但为什么会当成Long类型呢?终于在后面代码中找到了原因:

<c:when test="{temp.pkid eq 9991}">
     ...
</c:when>

将9991改成'9991',刷新页面,OK!

eq,首先通过==判断两个对象是不是相等的,然后检测到9991是int或long类型的,于是在转换pkid为eq右边对应的类型时出错了。

所以咱们不管什么时候都不可粗心大意,尽量做到比较的类型书写上互相保持一致,同时,java做业务开发针对JavaBean,尽量用对象类型,比如Long,String,Boolean, 减少不必要的麻烦,同时还可以避免频繁的装箱拆箱提高系统性能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值