javax.el.PropertyNotFoundException: 类型[com.bjsxt.pojo.Users]上找不到属性[isOff]
一、项目场景🐇
今天小编在写一个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接收的时候一定一定要用小写。
虽然现在的项目大多数是前后分离,用不到前端,本人也对前端一窍不通,以后的代码生活中需要注意这一点。
相关文章
- 解决方案:Vuetify 出现#activator={on,attrs}报错,类型“{ isActive: boolean; props: Record; }”上不存在属性“on”
- NumPy(三):N维数组属性【ndim :数组维度的个数/轴数/秩/rank】【shape:形状】【size:数组的元素总数】【dtype:元素的类型】【itemsize:每个元素的字节大小】
- java-读取javabean中所有属性和属性的类型
- 通过java类的反射机制获取类的属性类型
- java反射遍历实体类属性和类型,并赋值和获取值
- Maven内置变量(属性)
- 设定计算属性setter
- spring-data-jpa实体类继承抽象类如何映射父类的属性到数据库
- Spring_day01--注入对象类型属性(重点)_P名称空间注入_注入复杂类型属性_IOC和DI区别_Spring整合web项目原理
- Python------pyecharts中常用的属性解释 (出现样式问题可以看看,有空研究)
- Unity Shader 如何使用属性
- 《JS原理、方法与实践》- ES6原有对象新增属性
- 《中国人工智能学会通讯》——11.5 关联性用户属性推断
- C# 反射 操作列表类型属性
- C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
- 【HTML】HTML 标签总结 ★★★ ( 标签类型 | 排版标签 | 文本格式化标签 | 标签属性 | 图像标签 | 链接标签 | 注释标签 | 锚点定位 | 预格式化文本标签 | 特殊符号 )
- PyQt(Python+Qt)学习随笔:QTabWidget选项卡部件概述和属性介绍
- PyQt(Python+Qt)学习随笔:部件的inputMethodHints属性
- 在电脑上查找指定大小、类型或其它属性的文件
- ReactNative Text控件属性和样式
- android使用属性动画代替补间动画
- JavaScript事件属性event.target
- rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计
- iOS开发之--UITextField属性
- Objective-C - 属性类型修饰符
- Objective-C - 属性类型修饰符
- Objective-c - 当属性的类型是oc对象的时候,setter方法的写法