EL表达式学习小结

EL(Expression Language)表达式的目的是为了使JSP编写起来更加简单,在MVC体系结构中,JSP页面只是用来显示数据,但JSP脚本中的表达式功能不够强大,它不能直接对隐式对象中某些对象的属性进行显示,需要配合脚本才能取得数据。如果在JSP页面中使用EL表达式将大大简化JSP页面中的Java代码,再配合JSP标准库(JSTL),可达到真正的JSP无脚本。

1、EL简介

EL表达式语法:${表达式}

例1:${"Hello World"},则会在JSP页面输出Hello World,相当于JSP脚本的<%="Hello World"%>,在EL表达式中的单引号和双引号功能是一样的,表示一个字符串。

例2:${sessionScope.user.sex}则表示从Session的范围中,取得用户的性别,如果不用EL表达式,则其写法是:

User user = (User) session.getAttribute("user");
String sex = user.getSex();

显然,EL表达式简单很多。

2、EL的使用

在JSP页面中可以禁用EL表达式,默认是启用的,禁用时需要配置page指令的isELIgnored属性,属性值若为true则禁止EL表达式;若为false,则表示支持EL表达式。

3、算术运算符(+)

在EL表达式中,加号(+)只有数学运算的功能,没有连接字符串的作用,它会试着把运算符两边的操作数转换为数值类型,然后进行数学运算,最后把结果输出。如果出现${'a'+'b'}则会出现异常,因为EL表达式中的加号(+)不能连接字符串。

4、.与[]运算符

EL提供点(.)和中括号([])两种运算符来导航数据,在一些情况下它们所代表的意思是一样的:${sessionScope.user.sex}和${sessionScope.user[sex]}是等价的。

.和[]也可以同时混合使用,例如:${sessionScope.shoppingCart[0].price},表示的意思是取得shoppingCart中第一项商品的价格。

不过,在另一些情况下它们所代表的意思是不一样的:

(1)当要存取的属性名称中包含一些特殊字符(非字母、数字的符号,例如:点、横线等),就一定要使用[]。例如,${user.my-name}就是错误的表示,应当改为${user["my-name"]},记得要加双引号,否则则表示的是动态获取变量。

(2)当要动态取值时,例如:${sessionScope.user[data]},这里data是一个变量,若data的值为"sex",则等于${sessionScope.user.sex};若data的值为"name",则等于${sessionScope.user.name}。所以,如果要动态取值时,就可以用这种方法,而点(.)却不具有动态取值的功能。

5、EL获取变量

EL存取变量数据的方法很简单,例如:${username},表示取出某一范围中名为username的变量,由于没有指定是哪一个范围的username,所以默认会先从Page范围中找,如果找不到,再依序到Request、Session、Application范围。只要在过程中找到了username,那么就直接回传,不再继续往下找。但是,如果在全部的范围中都找不到时,就回传null,EL表达式会对null做优化,页面上显示空白,而不是打印出null。

属性范围(JSTL名称)
EL中的名称
page
pageScope
request
requestScope
session
sessionScope
application
applicationScope

上表中pageScope、requestScope、sessionScope、applicationScope都是EL的隐含对象,EL中的隐含对象不仅仅只有这么多,可参阅《EL表达式中隐含对象小结》。

6、EL运算符

EL关系运算符:

关系运算符说明
范例
结果
==或eq
等于${5==5}或${5eq5}
true
!=或eq不等于
${5!=5}或${5ne5}
false
<或lt
小于${3<5}或${3lt5}
true
>或gt
大于${3>5}或${3gt5}
false
<=或le
小于等于
${3<=5}或${3le5}
true
>=或ge
大于等于${3>=5}或${3ge5}
false

表达式语言不仅可在数字与数字之间比较,还可以在字符与字符之间比较,字符串的比较是根据对应unicode值来比较大小的。

注意:在使用EL关系运算符时,不能够写成:

${param.password1}==${param.password2}

或者

${${param.password1}==${param.password2}}

正确写法是:${param.password1==param.password2}

EL逻辑运算符:

逻辑运算符
范例
结果
&&或and
交集${A && B}或${A and B}
true/false
||或or
并集${A || B}或${A or B}
true/false
!或not非${! A}或${not A}
true/false

Empty运算符:Empty运算符主要用来判断值是否为空,Empty判断为空的情况有:null、空字符串、空集合。

条件运算符:${A ? B : C},表示如果A为true,则返回B,否则C。

参考资料:

1. EL表达式介绍

本文标题:EL表达式学习小结

本文链接:http://yedward.net/?id=342

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章