EL表达式支持简单的运算,例如,加(+)、减(一)、乘(*),陈(/)守。为此,在EL中越供了多种运算符,根据运算方式的不同,EL中原算符包括一下几种。
1.点运算符(.)
EL表达式中的点运算符,用于访问JSP页面中某些对象的属性,如JavaBean对象、List对象、Array对象等,其语法格式如下。
${customer.name}
在上述语法格式中,表达式${customer.name}中点运算符的作用就是访问customer对象中的name属性。
2.方括号运算符([)
EL表达式中的方括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“一”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性,其语法格式如下。
${user{"My-Name"}}
需要注意的是,在访问对象的属性时,通常情况都会使用点运算符作为简单的写法,但实际上,方括号运算符比点运算符应用更加广泛。接下来就对比一下这两种运算符在实际开发中的应用,具体如下。
(1)点运算符和方括号运算符在某种情况下可以互换,如${student.name}等价于${student["name"]}。
(2)方括号运算符和点运算符可以相互结合使用,例如,表达式${users[0].userName}可以访问集合或数组中的第一个元素的userName属性。
(3)方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符,而不能使用点运算符。
3.算术运算符
EL表达式中的算术运算符用于对整数和浮点数的值进行算术运算。使用这些算术运算符可以非常方便地在JSP页面进行算术运算,并且可以简化页面的代码量。接下来通过下表来列举EL表达式中所有的算术运算符。
算数运算符 | 说明 | 算数表达式 | 结果 |
---|---|---|---|
+ | 加 | ${10+2} | 12 |
– | 减 | ${10-2} | 8 |
* | 乘 | ${10*2} | 20 |
/(或div) | 除 | ${10/4}或${10div2} | 2.5 |
%(或mod) | 取模(取余) | ${10%4}或${10mod2} | 2 |
上表中,列举了EL表达式中所有的算术运算符,这些运算符相对来说比较简单。在使用这些运算符时需要注意两个问题,“一”运算符既可以作为减号,也可以作为负号,“/”或“div”运算符在进行除法运算时,商为小数。
4.比较运算符
EL表达式中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式,所有的运算符执行的结果都是布尔类型。接下来通过表来列举EL表达式中所有的比较运算术符。
比较运算符 | 说明 | 算数表达式 | 结果 |
---|---|---|---|
==(或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 |
上表中,列举了EL表达式中所有的比较运算符,在使用这些运算符时需要注意两个问题,具体如下:
(1)比较运算符中的“==”是两个等号,千万不可只写一个等号。
(2)为了避免与JSP页面的标签产生冲突,对于后4种比较运算符,EL表达式中通常使用括号内的表示方式,例如,使用“1t”代替“≤”运算符,如果运算符后面是数字,在运算符和数字之间至少要有一个空格,例如${1lt 2},但后面如果有其他符号时则可以不加空格,例如${1lt(1+1)}。
5.逻辑运算符
EL表达式中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍为布尔类型。接下来通过下表列举EL表达式中所有的逻辑运算符。
逻辑运算符 | 说明 | 算数表达式 | 结果 |
&&(and) | 逻辑与 | ${true&&false}或者{ture and false} | false |
||(or) | 逻辑或 | ${fasle||true}或者{false or true} | true |
!(not) | 逻辑非 | ${!true}或${not ture} | false |
上表中,列出了EL表达式中的3种逻辑运算符,需要注意的是,在使用&.&运算符时,如果有―个表达式结果为false,则结果必为false,在使用||运算符时,如果有一个表达式的结果为true,则结果必为true。
6.empty运算符
EL表达式中的emptv运算符用干判断某个对象是否为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表达式中的圆括号用于改变其他运算符的优先级,例如表示${a*b+C},正常情况下会计算a*b的积,然后再将计算的结果与C相加,如果在这个表达式中加一个圆括号运算符,将表达式修改为${a*(b+c)},这样则先计算b与C的和,再将计算的记过与a相乘。
需要注意的是,EL表达式中的运算符都有不同的运算优先级,当EL表达式中包含多种运算符时,它们必须按照各自优先级的大小来进行运算。接下来,通过下面表格来描述这些运算的优先级。
优先级 | 运算符 | 优先级 | 运算符 |
1 | []. | 6 | <> <= >= lt gt le ge |
2 | () | 7 | == != eq ne |
3 | -(-) not ! empty | 8 | && and |
4 | * / div % mod | 9 | || or |
5 | +(+)-(-) | 10 | ?: |
上面列表,列举了不同运算符各自的优先级大小。对于初学者来说,这些运算符的优先级不必刻意地去记忆。为了防止产生歧义,建议读者尽量使用“()”运算符来实现想要的运算顺序。注意:在应用EL表达式取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。
猜你喜欢
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/254013.html