使用EL表达式时,PropertyNotFoundException异常的解决过程

news/2024/5/14 21:10:39/文章来源:https://blog.csdn.net/finally_vince/article/details/128082866

一. 业务场景

最近,杨哥的一个班级正在做基于JSP+JSTL/EL + Servlet + JavaBean +JDBC +MySQL技术方案的阶段项目。其中有一个需求是根据多条件动态搜索商品信息,最终分页显示出商品列表。这个功能可以在dao层采用多分支条件组合,显示页面使用JSTL/EL中的c:forEach标签 ,再配合EL表达式显示商品的属性信息。

结果在开发实践中,有个学生的商品列表页信息却无法显示出来,服务器控制台直接爆出了一个异常!但他又不知道这个异常该怎么解决,于是就跑来问杨哥。我们在学习的时候,有很多初学者因技术运用不熟练,都会导致一些令人头疼的问题,其实遇到了问题不要怕,我们解决掉就好啦。

那么接下来,杨哥就以此项目中的这个常见异常为例,来带着大家分析项目开发过程中出现异常之后,该如何快速地解决问题。这样以后再遇到类似的问题时,大家就知道该怎么解决了。

二. 异常信息

我们先来看看这个异常是什么。

严重: Servlet.service() for servlet jsp threw exception
javax.el.PropertyNotFoundException: Property 'gname' not readable on type com.qf.pojo.Goodsat javax.el.BeanELResolver$BeanProperty.read(BeanELResolver.java:297)

很多同学在项目开发时,可能都遇到过此类异常。有些同学一看到密密麻麻的英文单词,几乎都不认识,脑袋嗡一下子就炸了。到底哪里出错了?出了什么错?两眼一抹黑,啥也不知道,反正就知道报错了,一下子就不知所措了。

杨哥在这里告诉大家,遇到问题千万不要紧张。如果你的单词量不行,可以使用有道翻译对照查看错误,慢慢积累单词就记住了。其实Java里的常用单词就那么几个,天天看起码知道啥意思,我们也不需要你背写单词对吧。

上面的异常,咱们根据字面意思来理解,就是在使用EL表达式时没有发现Goods类的gname属性的getter方法.......既然现在已经知道了这个错误,那就继续往下看该怎么解决吧!

三.EL表达式使用基本规则

在解决异常之前,杨哥先带领小伙伴们复习一下EL的使用规则。

  • EL表达式的作用是为了使jsp写起来更加简单,使代码简化;

  • 语法结构:${experssion};

  • EL表达式一般操作的都是域对象中的数据,但操作不了局部变量;

  • 域对象在jsp中分别是:pageContent,requset,session,application,这可比用page、requset、session、application去获取对象简单太多了;

  • 操作JavaBean对象:直接调用所定义类的方法和属性名,但要注意,必须在类中实现get方法

四. 原因排查

1.常见原因分析

我们在上面复习了EL表达式的基本使用规则之后,尤其是明白了bean对象的使用要求,你现在是否已经知道上面异常的产生原因是什么了吗?其实控制台里的信息已经把异常原因说的很清楚了:

Property 'gname' not readable on type com.qf.pojo.Goods

这里表示Goods类中的’gname‘属性不能获取。所以杨哥的第一反应就是,这个小伙伴可能忘了给‘gname’属性加getter方法了。于是杨哥直接查看了他的Goods类代码,结果发现类里面setter、getter方法都有:

另外该学员在排查异常时还做了查询结果输出,控制台显示查询的数据也完全正确,没有一点问题。于是,杨哥又在debug模式下打断点运行,也验证了数据响应并没有异常发生。

2. 真正原因所在

那么问题到底出在哪里呢

于是杨哥再次打开Goods类的源码,仔细阅读了起来。结果发现代码中的getGname方法名称颜色显示发灰。仔细一看,杨哥立刻就明白这家伙错在哪里了。原来,在写实体时,方法都是手动编写的,在写这个getGname()方法时多设置一个形参。我们知道,getter()方法是不需要带参数的!导致在运行时,系统把这个方法当成了普通方法,也就是说,实际上他并没有真正地’gname‘属性实现其对应的getter()方法。而EL表达式在显示对象属性时,其本质就是调用其getter方法

就是这样一个很小的细节,因为学生的粗心导致了上面的绑定错误!

也就是说,上面的异常其实是由一个很小的失误引发的错误!是不是太不应该出现这种错误了呢?而我们很多人在刚开始学习编程时所犯的错误,绝大多数都是因为马虎造成的!

五. 解决办法

其实解决办法很简单,只需要将多余的形参去掉就好了!

六. 总结与反思

本案例中的异常,是因粗心大意导致类的属性没有getter方法引起的错误,这不仅仅引发了PropertyNotFoundException异常,同时也暴露了很多人在学习时存在的一些缺点:

1). 对封装的理解不够深入;2). EL表达式的本质理解较浅;3). debug能力需要提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38420.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Linux](15)线程基础,线程控制,线程的互斥与同步

文章目录前言Linux 线程概念线程的优点线程的缺点线程异常线程用途使用pthread_createpthread_join线程退出线程id分离线程线程互斥问题:临界资源访问问题问题解决:互斥锁的使用RAII 风格的加锁方式可重入 & 线程安全死锁的概念线程同步条件变量生产…

C语言——指针(入门详解)

文章目录1.什么是指针?1.1.理解指针的两个要点:1.2.指针变量:1.3.内存是如何编址?2.指针和指针类型2.1指针的创建与初始化2.2.指针类型3.野指针3.1.什么视野指针?3.2.野指针成因3.3.规避野指针4.指针运算4.1.指针-整数…

【MySQL】数据库服务器硬件优化与实战详解(调优篇)(实战篇)(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

【一文秒懂——SLF4j日志】

目录 1. SLF4j日志 2. 日志输出 1. SLF4j日志 在添加了spring-boot-starter的项目中,已经包含了SLF4j日志的相关依赖项。 在添加了lombok的项目中,可以在类上添加Slf4j注解,则lombok框架会在编译期在类中声明名为log的变量,通…

2022Flink大数据比赛项目-焦点科技大数据编程大赛

文章目录0.数据获取1.需求概要2.数据标准2.1.输入数据格式2.2.输出数据格式2.3.数据主键及关系3.表详细1.order_info2.bill_info3.bill_item4.ord_pay5.ord_pay_log6.pay_method7.pay_bank_card4.开发工具、语言版本、工具版本5.赛题解答数据分流任务1任务2任务3小结附录0.数据…

聊聊雪花算法?

随便聊聊 哈喽,大家好,最近换了份工作,虽然后端技术栈是老了点,但是呢,这边的前端技术确是现在市面上最新的那一套技术:Vue3ViteTSXPinaElement-PlusNativeUI。我本人主要是学后端的,确被拉去做…

【博客545】从交换机视角看四种报文:广播、组播、未知单播、已知单播

从交换机视角看四种报文:广播、组播、未知单播、已知单播 交换机视角的四种报文 对于二层交换机来说,它在转发报文时,只有四种类型的报文: 1、广播 2、组播 3、未知单播 4、已知单播。四种报文剖析 1、二层广播报文 当二层交换…

SignalR简介及实践指南

SigalR简介 ASP.NET Core SignalR 是一个开放源代码库,可用于简化向应用添加实时 Web 功能。 实时 Web 功能使服务器端代码能够将内容推送到客户端。 适合 SignalR 的候选项: 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖…

易观千帆 | 2022年10月银行APP月活跃用户规模盘点

易观分析:易观千帆数据显示,10月手机银行服务应用活跃人数52285.79万,环比下降3.52%。手机银行服务应用月活规模经历了连续5个月的持续增长后,10月出现下降。 10月城商行手机银行服务应用活跃人数3565.56万,环比下降2…

UNIAPP实战项目笔记46 订单确认页面的布局

UNIAPP实战项目笔记46 订单确认页面的布局 实际案例图片 订单页面 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 confirm-order.vue部分 confirm-order.vue 确认订单页面布局和渲染 flex 样式布局 <template>…

字符串5:剑指Offer58-II.左旋转字符串

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;344. 反转字符串 题目&#xff1a; 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个…

衡师11月月赛web题目wp

目录 1.丢三落四的学姐 2.wep&#xff1f;Pwn&#xff01;&#xff01;&#xff01; 这题web部分是buuctf中的DASCTF X GFCTF 2022十月挑战赛&#xff01;的原题 1.丢三落四的学姐 访问题目位置&#xff0c;很明显的phpstudy搭建的痕迹 访问一下经常信息泄露的几个文件&…

Baklib|知识库应用场景:制作员工培训手册

持续的专业发展对于想要加入、保留和提升员工的组织来说是必不可少的。为了确保员工总是能从学习能力中受益&#xff0c;您需要考虑创建培训手册&#xff0c;使员工能够胜任并保持他们的工作能力。 在过去&#xff0c;您可能认为培训手册是一本厚重的册子&#xff0c;充满了密…

一文彻底搞懂Mysql索引优化

专属小彩蛋&#xff1a;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff08;前言 - 床长人工智能教程&#xff09; 目录 一、索引介绍 二、性能分析 三、查询优化 一、索引介绍…

Oracle中ALTER TABLE的五种用法(三)

首发微信公众号&#xff1a;SQL数据库运维 原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzI1NTQyNzg3MQ&mid2247485212&idx1&sn450e9e94fa709b5eeff0de371c62072b&chksmea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a…

通俗易懂的java设计模式(1)-单例模式

什么是单例模式&#xff1f; 单例模式是java中最简单的一种设计模式 需要注意的问题&#xff1a; 1.单例类有且只能有一个实例 2.单例类必须自己创建出这个实例&#xff0c;并提供给外界 那么如何自己创建实例而不让外界创建呢&#xff1f;很简单&#xff0c;我们将无参的构造函…

传输线理论基础01——相关定义、信号速率、分布参数与电报方程

前言一直以来都对高频信号、信号完整性、传输线、分布参数这些概念似懂非懂&#xff0c;上学时没学过相关课程&#xff0c;这导致我对高频电路和PCB理解较差&#xff0c;这里新开一个专栏&#xff0c;补齐这方面知识。 一. 传输线相关定义1.1 传输线定义 传输线指的是传输信号…

【Hack The Box】Linux练习-- Seventeen

HTB 学习笔记 【Hack The Box】Linux练习-- Seventeen &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月7日&#x1f334; &#x1f…

【数据去噪】SG-多项式平滑算法

文章目录一、简介二、原理5点3次多项式平滑三、代码1. 3点线性平滑2. 5点线性平滑3. 5点2次线性平滑4. 5点3次线性平滑5. 7点线性平滑6. 7点2次线性平滑一、简介 在处理工业数据的时候&#xff0c;工业数据有数据颗粒细&#xff0c;噪声大&#xff0c;量大&#xff0c;随着测量…

拿捏Fiddler抓包教程(10)-Fiddler如何设置捕获Firefox浏览器的Https会话

1.简介 经过上一篇对Fiddler的配置后&#xff0c;绝大多数的Https的会话&#xff0c;我们可以成功捕获抓取到&#xff0c;但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话&#xff0c;需要我们更进一步的配置才能捕获到会话进行抓包。 2.宏哥环境 1.宏哥的环境是Win…