表达式原理

表达式原理

问题1:不是说属性必须有get方法,才能进行查找的吗,为什么grade没有get方法,就可以输出呢?问题2:

如果对象的属性没有get方法, 但是有赋值属性,比如public String name="张三";在request自定义添加了这个name的属性, 表达式还可以取出这个值吗?

问3:

自定义Student这个类的对象是stu吧? 为什么

<h2>概要:${student }</h2>

不是写对象,也不是写Student这个类,而是自定义属性中的名称,这是个名称阿,又不是对象,也不是属性阿,只是说它的值是stu对象吧?为什么一直说student对象?student是个类,而stu是student的对象把?

问4:

 <h1>姓名:${requestScope.student.name }</h1>

这个student也就是自定义属性的名称吧?所谓的属性名吧?但是属性名称里面存放的是stu对象,那么下面老师说的user怎么又是类了? 他不是应该也是属性名吗?对应的对象,然后这个对象里面存放的userName这个属性;在通过get去查找这个属性,然后进行作用域查找,并输出阿。但是老师说的是去User类里寻找这个userName的get方法,??user不是属性名吗??

EL表达式获取对象属性的原理如下:

以表达式${user.userName}为例

EL表达式会根据userName去User类里寻找这个userName的get方法,此时会自动把userName首字母大写并加上get前缀,一旦找到与之匹配的方法,El表达式就会认为这就是要访问的属性,并返回属性的值。所以,想要通过EL表达式获取对象属性的值,那么这个属性就必须有与之对应的get方法。

但是这个user又是类了?不是属性名了?

问题5:

http://img1.sycdn.imooc.com/climg/6050c78809c1b86305500162.jpg为什么是null,不是用了el表达式了吗?表达式不是会显示空的属性吗。 

问题6:

在表达式中,只有自定义存放的是对象信息,才需要输入子属性的吧? 如果存放的是一个变量,直接在表达式中写自定义属性名就行了吧,比如

  <h2>评价信息:${requestScope.grade }</h2>   grade中存放的就是一个grade的变量, 并没有子属性。 所谓子属性就是对象中才会有的吧。 理解对吗


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿满 2021-03-17 11:14:13

同学你好,关于同学的问题,有如下回答:

1、对象的属性必须有get方法,才能使用在el表达式中使用对象.属性名的方式获取值,但是这里的grade并不是对象的属性,不需要通过对象.属性名的方式获取,所以grade不需要get方法。

2、对象的属性没有get方法,不能在el表达通过对象.属性名的方式取值。

3、在Servlet中定义的Student类对象是stu,存入到session中时,名称为student,如:

http://img1.sycdn.imooc.com//climg/605171290918ef3607850364.jpg

这里的student就是指存入session的stu对象,在jsp中,可以通过student获取stu对象,这里student可以说是对象。

4、 <h1>姓名:${requestScope.student.name }</h1>这里的student是存入request的名称,指的是stu对象,jsp中获取student是对象,不是属性。可以使用el表单对象.属性名的方式获取属性值。

${user.userName}这里的user也是对象,是User类的对象,el表达式会根据userName去User类里寻找这个userName的get方法,会自动把userName首字母大写并加上get前缀,找到对应的方法,获取属性值。

5、toString()方法中,冒号后边是mobile,如:

http://img1.sycdn.imooc.com//climg/60517380094e180c06330098.jpg

在Servlet中设置的值为null,如:

http://img1.sycdn.imooc.com//climg/605173a8095918fe05650165.jpg

输出对象时,是使用toString()方法进行输出,所以最后输出的mobile为null。

6、同学的理解是正确的。

祝学习愉快~

  • 提问者 rock221 #1

    问题5:

    显示null是因为toString方法了吧。toString的方法就是显示赋值后的内容,所以。。。对吧?

    而手机显示空,是因为没有用toString方法, el自带的优化功能生效了。 对吧

    2021-03-17 11:22:30
  • 好帮手慕阿满 回复 提问者 rock221 #2

    同学你好,同学的理解是正确的。

    祝学习愉快~

    2021-03-17 11:44:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师