学科分类
目录
Java Web

EL中的运算符

EL表达式支持简单的运算,例如,加(+)、减(-)、乘(*)、除(/)等。为此,在EL中提供了多种运算符,根据运算方式的不同,EL中的运算符包括以下几种:

1、点运算符(.)

EL表达式中的点运算符,用于访问JSP页面中某些对象的属性,如JavaBean对象、List对象、Array对象等,其语法格式如下:

${customer.name}

在上述语法格式中,表达式${customer.name}中点运算符的作用就是访问customer对象中的name属性。

2、方括号运算符([])

EL表达式中的方括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“-”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性,其语法格式如下:

${user["My-Name"]}

需要注意的是,在访问对象的属性时,通常情况都会使用点运算符作为简单的写法,但实际上,方括号运算符比点运算符应用更加广泛。接下来就对比一下这两种运算符在实际开发中的应用,具体如下:

● 点运算符和方括号运算符在某种情况下可以互换,如${student.name}等价于${student["name"]}。

● 方括号运算符和点运算符可以相互结合使用,例如,表达式${users[0].userName}可以访问集合或

数组中的第一个元素的userName属性。

● 方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符,而不能使用点运算符。

3、算术运算符

EL表达式中的算术运算符用于对整数和浮点数的值进行算术运算。使用这些算术运算符可以非常方便地在JSP页面进行算术运算,并且可以简化页面的代码量。接下来通过表1来列举EL表达式中所有的算术运算符。

表1 算术运算符

算术运算符 说明 算术表达式 结果
+ ${10+2} 12
- ${10-2} 8
* ${10*2} 20
/(或div) ${10/4}或${10 div 2} 2.5
%(或mod) 去模(取余) ${10%4}或${10 mod 2} 2

表1中,列举了EL表达式中所有的算术运算符,这些运算符相对来说比较简单。在使用这些运算符时需要注意两个问题,“-”运算符即可以作为减号,也可以作为负号,“/”或“div”运算符在进行除法运算时,商为小数。

4、比较运算符

EL表达式中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式,所有的运算符执行的结果都是布尔类型。接下来通过表2来列举EL表达式中所有的比较运算术符。

表2 比较运算符

比较运算符 说明 算术表达式 结果
==(或eq) 等于 ${10==2}或${10 eq 2} false
!=(或ne) 不等于 ${10!=2}或${10 ne 2} true
<(或lt) 小于 ${10<2}或${10 lt 2} false
>(或gt) 大于 ${10>2}或${10 gt 2} true
<=(或le) 小于等于 ${10<=2}或${10 le 2} false
>=(或ge) 大于等于 ${10>=2}或${10 ge 2} true

表2中,列举了EL表达式中所有的比较运算符,在使用这些运算符时需要注意两个问题,具体如下:

● 比较运算符中的“==”是两个等号,千万不可只写一个等号。

● 为了避免与JSP页面的标签产生冲突,对于后四种比较运算符,EL表达式中通常使用括号内的表示方式,例如使用“lt”代替“<”运算符,如果运算符后面是数字,在运算符和数字之间至少要有一个空格,例如${1lt 2},但后面如果有其它符号时则可以不加空格,例如${1lt(1+1)}。

5、逻辑运算符

EL表达式中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍为布尔类型。接下来通过表3来列举EL表达式中所有的逻辑运算术符。

表3 逻辑运算符

逻辑运算符 说明 算术表达式 结果
&&(and) 逻辑与 ${true&&false}或${true and false} false
||(or) 逻辑或 ${false||true}或${false or true} true
!(not) 逻辑非 ${!true}或${not true} false

表3中,列出了EL表达式中的3种逻辑运算符,需要注意的是,在使用&&运算符时,如果有一个表达式结果为false,则结果必为false,在使用||运算符时,如果有一个表达式的结果为true,则结果必为true。

6、empty运算符

EL表达式中的empty运算符用于判断某个对象是否为null或””,结果为布尔类型,其基本的语法格式如下所示:

${empty var}

需要注意的是,empty运算符可以判定变量(或表达式)是否为null或””。例如下列情况empty运算符的返回值为true:

1)var变量不存在,即没有定义,例如表达式${empty name},如果不存在name变量,就返回true。

2)var变量的值为null,例如表达式${empty customer.name},如果customer.name的值为null,就返回true。

3)var变量引用集合(Set、Map和List)类型对象,并且在集合对象中不包含任何元素。

7、条件运算符

EL表达式中条件运算符用于执行某种条件判断,它类似于Java语言中的if-else语句,其语法格式如下:

${A?B:C}

在上述语法格式中,表达式A的计算结果为布尔类型,如果表达式A的计算结果为true,就执行表达式B并返回B的值;如果表达式A的计算结果为false,就执行表达式C并返回C的值,例如表达式${(1==2)?3:4}的结果就为4。

8、“( )”运算符

EL表达式中的圆括号用于改变其它运算符的优先级,例如表达式${ab+c},正常情况下会先计算ab的积,然后再将计算的结果与c相加,如果在这个表达式中加一个圆括号运算符,将表达式修改为${a*(b+c)},这样则先计算b与c的和,再将计算的结果与a相乘。

需要注意的是,EL表达式中的运算符都有不同的运算优先级,当EL表达式中包含了多种运算符时,它们必须按照各自优先级的大小来进行运算。接下来,通过表4来描述这些运算符的优先级。

表4 运算符的优先级

优先级 运算符
1 [] .
2 ()
3 -(unary) not ! empty
4 * / div % mod
5 + -(binary)
6 < > <= >= lt gt le ge
7 == != eq ne
8 && and
9 || or
10 ?:

表4列举了不同运算符各自的优先级大小。对于初学者来说,这些运算符的优先级不必刻意的去记忆。为了防止产生歧义,建议大家尽量使“()”运算符来实现想要的运算顺序。

注意:

在应用EL表达式取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。

点击此处
隐藏目录