zl程序教程

您现在的位置是:首页 >  其他

当前栏目

javax.el.PropertyNotFoundException: 类型[com.bjsxt.pojo.Users]上找不到属性[isOff]

属性 类型 不到 com el javax Users POJO
2023-09-27 14:27:14 时间

一、项目场景🐇

今天小编在写一个jsp+servlet的功能时,jsp报错了这个bug,现在来复盘一下这个bug的产生,和当时的解决方案,还有就是总结下自己的不严谨。

在这里插入图片描述

二、解决方案🐇

提督并没有第一时间百度,而是去测试了自己的代码(那时候并不认为是jsp的bug,测试了dao层,service层,都没问题;
然后以为是代码中isOff的单词拼写错误,检查之后并没有写错,然后又关闭服务器重新启动之后尝试了一下,依旧报出这个异常,尝试在博客上找相似的问题,最后发现问题在于单词命名有错误,将实体类和jsp中的名称都改为isOff之后就解决了这个问题,所以在命名过程中一定要遵循变量命名的规则避免出现类似的错误。
然后才把注意力放在jsp上,发现是el表达式的问题(看bug很重要),现在来看看el表达式展示数据的本质:
el表达式在你获取对象时,自动把你的属性名转换成字符串,并把首字母大写,进行拼接(“get”+属性名),然后通过反射的方式获取到get方法,返回属性值。实际上就是调用了一遍JavaBean里面的某属性的get函数。
提督pojo的字段名刚好撞上了:

在这里插入图片描述

总所周知,Boolean的set get方法会变成isXX(), 我这个字段有is了,就只会变成getOff();

   public Boolean getOff() {
        return isOff;
    }

最后把它改成这样就好了
在这里插入图片描述

三、总结🐇

这个bug说起来,还是因为小编起变量名字不规范,导致出现了没有必要的错误
在一般的情况我们都会觉得这代码写得没毛病啊!字段不是要一一对应的吗?其实在Java中并不是这样的。
解决这种问题的方法:把jsp中的字段改为小写,个人建议在封装po的时候一般都是用小写的。如果你要用大写也是可以的,不过你的jsp接收的时候一定一定要用小写。
虽然现在的项目大多数是前后分离,用不到前端,本人也对前端一窍不通,以后的代码生活中需要注意这一点。