EL表达式中的首字母大写造成的bug

博主帮朋友排查代码错误,发现问题出在前端JSP。在JSP中,常规注释无效,需用<%-- --%>。进一步排查发现,EL表达式取值时因大小写问题出错,EL找值是将值首字母大写拼接getter方法,首字母大写会找第二个,若第二个非大写则无法拼接getter,导致取值失败。

今天用帮朋友找代码错误的时候,发现了一个错误

Property 'Id' not found on type com.mhz.core.po.Student

就是说我要的值在po类中找不见

能找见啊喂,一步一步的注释掉,一步一步的输出,发现直到传值到jsp前所有的流程都是正确的,后台也可以正常输出我要找的值

所以就断定问题出在前端上

于是乎,把jsp中用到Id的地方用<!-- --!>注释掉

这中间还发现了个问题,jsp注释不能用上面的,用了服务器并不会给你注释,也就是说这个注释在jsp中算是个假的注释

要用<%-- --%>,不用的话就会出现给你的注释报错的情况。。。。真的是第一次见,还是基础不扎实

扯远了,回到正题

看el表达式,发现前面所有用对象中其他值的表达式都没有出错,唯一的区别就是他这个因为要和数据库匹配所以用了大写

el中改回小写,重启服务器,测试成功

于是上网查原理,发现el找值的时候只是把值的第一个字母大写然后拼接成getter方法来找,首字母大写的话就会找第二个。。

然后第二个不是大写就没找见,也就没法拼接getter,也就在el的眼里就没有这个值

所以总结:

当el表达式首字母大写,会判断第二个字母大小写,小写,抛异常;大写,则直接拼接get,形成getter方法
当el表达式首字母小写,会判断第二个字母大小写,大写,必须第一个字母大写;否则无法获取值
el首字母大写,至少第二个字母必须大写。

完毕

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值