您当前的位置: 首页 > 

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JSP常见异常之PropertyNotFoundException

发布时间:2018-05-03 10:31:18 ,浏览量:0

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。

1 问题描述

最近在进行EL表达式的学习时,发现了一个问题,那就是在一个同时有java类和EL表达式的jsp页面中,通过EL表达式无法得到类的属性值,源码如下:

640?wx_fmt=png

在jsp页面中通过java脚本段里编写了一个Admin类,并new了一个admin对象,对admin的name属性赋值为wang,并且将admin的属性存储在admin这个session对象中,最后通过EL表达式获admin的name属性的值,执行以上程序,最后得到的结果如下:

640?wx_fmt=png

其错误信息为:在类型上找不到属性name,为什么会出现找不到属性的问题?明明我们已经定义了变量name,是Amdin类的问题还是EL表达式书写错误,下面我们就这两点进行分析。

2 问题分析

一般来说当我们遇到一些bug时一般都会有一些固定的思路去尝试解决问题,常用的解决思路是从语法错误和逻辑错误来进行分析,因此我们从这两个方面入手,进行了以下一些猜想分析。 

猜想一

因为我们在页面使用的EL表达式来获取对象的属性,所以首先想到的就是会不会是EL表达式语法的错误导致了问题的出现。 我们了解到EL表达式要访问一个对象的属性的是有两种方法,就上面要访问admin的name属性来说,第一种为${sessionScope.admin.name},另一种为${sessionScope.admin[“name”]},于是我们将获取属性值的方法替换为第二种,调试运行,发现还是出现一样的错误,因此基本上可以排除是EL表达式语法的错误导致问题的出现。 

猜想二

在Admin这个类中我们发现这个类只有对应的属性值却没有其对应的set和get方法,会不会是缺少set和get方法导致的问题。我们给Admin类添加set和get方法。

640?wx_fmt=png

添加后再进行测试,结果无效,还是会出现一样的错误。 正当一筹莫展时,发现了一个不起眼的关于EL表达式的“.”运算符的描述, 原文如下: “.”运算符一般情况下获取Map对象的一个键值或JavaBean对象的某一个属性值。 于是我猜想会不会这个Admin类会不会不是一个JavaBean对象,因此导致的错误,那么什么是JavaBean对象呢?如何去编写一个JavaBean对象,因此我们就产生了猜想三。 

猜想三

由于Admin类不是一个JavaBean对象,因此导致问题出错。 Sun公司对JavaBean的定义为:JavaBean是一个能在IDE可视化编程工具中使用的可重用的软件组件。实质上JavaBean组件是用过Java代码封装的Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简单来说一个javaBean就是一个封装类,了解之后,我们开始编写代码。 我们在src文件下建立一个bean包,在包下面建立Admin类:

640?wx_fmt=png

将Admin类进行封装:

640?wx_fmt=png

修改jsp中的代码:

640?wx_fmt=png

调试运行:

640?wx_fmt=png

可以得到正确的结果,问题解决,当我以为问题解决时新的问题又出现了。我们在jsp页面的java脚本里面将Admin类写成一个javabean测试:

640?wx_fmt=png

调试运行:

640?wx_fmt=png

虽然java脚本段里的Admin类也具有set和get方法,但依然无法得到正确的结果,其错误信息依旧为:在类型上找不到属性name。

3 总结

本文主要解决了在一个同时有java类和EL表达式的jsp页面中,通过EL表达式无法得到类的属性值的问题,其具体解决方法为:在src包下新建一个包,然后将此类进行封装,最后在jsp页面中引用此类,通过EL表达式得到属性值。 

思考:

  1. EL表达式是如何得到属性的值,是否与类中的set和get方法有关。 

  2. 为什么在jsp页面的java脚本段中将类进行封装,通过EL表达式无法得到正确的结果?

  3. EL表达式中的变量是否只能获取page、request、session和application范围内定义的变量,为什么?

本文作者:朱肖东

责任编辑:justin_cn

更多精彩文章:

 where2go 团队

   

微信号:算法与编程之美          

640?wx_fmt=jpeg

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!欢迎转发!

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3828s