EL表达式
EL表达式
概述
什么是EL表达式?
EL
(Expression Language,表达式语言),是一种写法非常简洁的表达式,语法简单易懂,便于使用。
表达式语言的灵感来自于ECMAScript和XPath表达式语言。
EL表达式的作用
让jsp书写起来更加的方便。简化在jsp中获取作用域数据或者请求数据的写法。也会搭配Jstl来进行使用。
EL的特点
EL除了具有语法简单、使用方便的特点,还具有以下特点:
- (1)EL可以与JSTL结合使用,也可以与JavaScript语句结合使用。
- (2)EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值(例如,number1和number2)的和,可以直接通过
+
号进行连接(例如,${number1+number2}
)。 - (3)EL不仅可以访问一般变量,而且还可以访问JavaBean中的属性以及嵌套属性和集合对象。
- (4)在EL中可以执行算术运算、逻辑运算、关系运算和条件运算等。
- (5)在EL中可以获得命名空间(PageContext对象,它是页面中所有其它内置对象的最大范围的集成对象,通过它可以访问其它内置对象)。
- (6)在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infinity,而不返回错误。
- (7)在EL中可以访问JSP的作用域(request、session、application以及page)。
- (8)扩展函数可以与Java类的静态方法进行映射。
EL的基本语法
1、语法结构
基本语法:${expression}
2、[ ]与.运算符
EL提供"."
和"[ ]"
两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如.或?
等并非字母或数字的符号,就一定要使用[ ]
。
(1)点号操作符
在使用EL时,EL表达式一般由两部分组成,如${userInfo.id}
,其中,"."
被称作点号操作符,在点号操作符左边可以是一个JavaBean对象,也可以是EL隐式对象,点号右边可以是JavaBean属性,也可以是一个映射键。
(2)[ ]操作符
如果使用EL操作数据组,则使用"."
操作符就不能进行有效的操作,这时应该使用"[ ]"
,如${list[0]}
。但是这并不代表"[ ]"
只能操作数组,"."
操作符可以操作的对象,都可以使用"[ ]"
来进行操作,如${userInfo["id"]}
,注意使用"[ ]"
操作符时,"[ ]"
中必须包含有" "
双引号(操作数组也可以写成${list["0"]}
,等价于${list[0]}
)。
但是也不是所有情况都可以相互替代,例如,当对象的属性名中包括一些特殊的符号(-
或.
)时,就只能使用"[ ]"
运算符来访问对象的属性。例如,${userInfo["user-id"]}
是正确的,而${userInfo.user-id}
则是错误的。另外,EL的"[ ]"
运算符还有一个用途,就是用来获取数组或者List集合中的数据。
3、保留的关键字
同Java一样,EL也有自己的保留关键字,在为变量命名时,应该避免使用这些关键字,包括在使用EL输出已经保存在作用域范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其它的变量名。EL的保留关键字如下所示。
- and or not eq gt lt ge le
- instanceof div false empty
4、获取对象中的数据
普通对象
${键名.属性名.属性名...}
集合对象
- list集合:
${键名[下标]}
- map集合:
${键名.map集合存储的键名}
访问JavaBean对象
- 可以写成以下两种形式:
${user.id}
${user["id"]}
4、EL表达式运算符
- 1、算术运算符:加(+)、减(-)、乘(*)、除(/或div)、取余(%或mod)。
- 2、逻辑运算符:与(&&或and)、或(||或or)、非(!或not)。
- 3、关系运算符:等于(==或eq)、大于(>或gt)、小于(<或lt)、大于等于(>=或ge)、小于等于(<=或le)、不等于(!=或ne)。
- 4、empty运算符:判断JSP作用域中是否有相应的数据,如果没有返回为true,反之为false。
- 5、**条件运算符(三目运算符)**:表达式1?表达式2:表达式3
例如:
- 逻辑运算:
${4>2}
-> true - 算术运算:
${1+2}
-> 3 、${1+'2'}
-> 3 - 关系运算:
${4==2}
-> false - 三目运算:
${sex==1?'男':'女'}
-> 女 - 注意:
"+"
号在EL表达式中默认做加法运算,不做字符串连接。使用EL表达式进行字符串连接会报错。 - EL的空值判断:
- 语法格式:
${empty 键名}
,${not empty 键名}
- 作用:判断键名对象的值是否存有数据。
- 语法格式: