更新時間:2021年11月04日15時49分 來源:傳智教育 瀏覽次數(shù):
EL表達(dá)式支持簡單的運算,例如,加(+)、減(一)、乘(*),陳(/)守。為此,在EL中越供了多種運算符,根據(jù)運算方式的不同,EL中原算符包括一下幾種。
EL表達(dá)式中的點運算符,用于訪問JSP頁面中某些對象的屬性,如JavaBean對象、List對象、Array對象等,其語法格式如下。
${customer.name}
在上述語法格式中,表達(dá)式${customer.name}中點運算符的作用就是訪問customer對象中的name屬性。
EL表達(dá)式中的方括號運算符與點運算符的功能相同,都用于訪問JSP頁面中某些對象的屬性,當(dāng)獲取的屬性名中包含一些特殊符號,如“一”或“?”等并非字母或數(shù)字的符號,就只能使用方括號運算符來訪問該屬性,其語法格式如下。
${user{"My-Name"}}
需要注意的是,在訪問對象的屬性時,通常情況都會使用點運算符作為簡單的寫法,但實際上,方括號運算符比點運算符應(yīng)用更加廣泛。接下來就對比一下這兩種運算符在實際開發(fā)中的應(yīng)用,具體如下。
(1)點運算符和方括號運算符在某種情況下可以互換,如${student.name}等價于${student["name"]}。
(2)方括號運算符和點運算符可以相互結(jié)合使用,例如,表達(dá)式${users[0].userName}可以訪問集合或數(shù)組中的第一個元素的userName屬性。
(3)方括號運算符還可以訪問List集合或數(shù)組中指定索引的某個元素,如表達(dá)式${users[0]}用于訪問集合或數(shù)組中第一個元素。在這種情況下,只能使用方括號運算符,而不能使用點運算符。
EL表達(dá)式中的算術(shù)運算符用于對整數(shù)和浮點數(shù)的值進(jìn)行算術(shù)運算。使用這些算術(shù)運算符可以非常方便地在JSP頁面進(jìn)行算術(shù)運算,并且可以簡化頁面的代碼量。接下來通過下表來列舉EL表達(dá)式中所有的算術(shù)運算符。
算數(shù)運算符 | 說明 | 算數(shù)表達(dá)式 | 結(jié)果 |
---|---|---|---|
+ | 加 | ${10+2} | 12 |
- | 減 | ${10-2} | 8 |
* | 乘 | ${10*2} | 20 |
/(或div) | 除 | ${10/4}或${10div2} | 2.5 |
%(或mod) | 取模(取余) | ${10%4}或${10mod2} | 2 |
上表中,列舉了EL表達(dá)式中所有的算術(shù)運算符,這些運算符相對來說比較簡單。在使用這些運算符時需要注意兩個問題,“一”運算符既可以作為減號,也可以作為負(fù)號,“/”或“div”運算符在進(jìn)行除法運算時,商為小數(shù)。
EL表達(dá)式中的比較運算符用于比較兩個操作數(shù)的大小,操作數(shù)可以是各種常量、EL變量或EL表達(dá)式,所有的運算符執(zhí)行的結(jié)果都是布爾類型。接下來通過表來列舉EL表達(dá)式中所有的比較運算術(shù)符。
比較運算符 | 說明 | 算數(shù)表達(dá)式 | 結(jié)果 |
---|---|---|---|
==(或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表達(dá)式中所有的比較運算符,在使用這些運算符時需要注意兩個問題,具體如下:
(1)比較運算符中的“==”是兩個等號,千萬不可只寫一個等號。
(2)為了避免與JSP頁面的標(biāo)簽產(chǎn)生沖突,對于后4種比較運算符,EL表達(dá)式中通常使用括號內(nèi)的表示方式,例如,使用“1t”代替“≤”運算符,如果運算符后面是數(shù)字,在運算符和數(shù)字之間至少要有一個空格,例如${1lt 2},但后面如果有其他符號時則可以不加空格,例如${1lt(1+1)}。
EL表達(dá)式中的邏輯運算符用于對結(jié)果為布爾類型的表達(dá)式進(jìn)行運算,運算的結(jié)果仍為布爾類型。接下來通過下表列舉EL表達(dá)式中所有的邏輯運算符。
邏輯運算符 | 說明 | 算數(shù)表達(dá)式 | 結(jié)果 |
&&(and) | 邏輯與 | ${true&&false}或者{ture and false} | false |
||(or) | 邏輯或 | ${fasle||true}或者{false or true} | true |
!(not) | 邏輯非 | ${!true}或${not ture} | false |
上表中,列出了EL表達(dá)式中的3種邏輯運算符,需要注意的是,在使用&.&運算符時,如果有―個表達(dá)式結(jié)果為false,則結(jié)果必為false,在使用||運算符時,如果有一個表達(dá)式的結(jié)果為true,則結(jié)果必為true。
EL表達(dá)式中的emptv運算符用干判斷某個對象是否為null或"",結(jié)果為布爾類型,其基本的語法格式如下所示。
${empty var}
需要注意的是,empty運算符可以判定變量(或表達(dá)式)是否為null或""。例如,下列情況empty運算符的返回值為true。
(1) var變量不存在,即沒有定義,例如表達(dá)式${empty name},如果不存在name變量,就返回true。
(2) var變量的值為null,例如表達(dá)式${empty customer.name},如果customer.name的值為null,就返回true。
(3) var變量引用集合(Set、 Map和 List)類型對象,并且在集合對象中不包含任何元素。
EL表達(dá)式中條件運算符用于執(zhí)行某種條件判斷,它類似于Java語言中的if一else語句,其語法格式如下。
${A? B:C}
在上述語法格式中,表達(dá)式A的計算結(jié)果為布爾類型,如果表達(dá)式A的計算結(jié)果為true,就執(zhí)行表達(dá)式B并返回B的值;如果表達(dá)式A的計算結(jié)果為false,就執(zhí)行表達(dá)式C并返回C的值,例如表達(dá)式${(1==2)?3:4}的結(jié)果就為4。
EL表達(dá)式中的圓括號用于改變其他運算符的優(yōu)先級,例如表示${a*b+C},正常情況下會計算a*b的積,然后再將計算的結(jié)果與C相加,如果在這個表達(dá)式中加一個圓括號運算符,將表達(dá)式修改為${a*(b+c)},這樣則先計算b與C的和,再將計算的記過與a相乘。
需要注意的是,EL表達(dá)式中的運算符都有不同的運算優(yōu)先級,當(dāng)EL表達(dá)式中包含多種運算符時,它們必須按照各自優(yōu)先級的大小來進(jìn)行運算。接下來,通過下面表格來描述這些運算的優(yōu)先級。
優(yōu)先級 | 運算符 | 優(yōu)先級 | 運算符 |
1 | []. | 6 | <> <= >= lt gt le ge |
2 | () | 7 | == != eq ne |
3 | -(-) not ! empty | 8 | && and |
4 | * / div % mod | 9 | || or |
5 | +(+)-(-) | 10 | ?: |
上面列表,列舉了不同運算符各自的優(yōu)先級大小。對于初學(xué)者來說,這些運算符的優(yōu)先級不必刻意地去記憶。為了防止產(chǎn)生歧義,建議讀者盡量使用“()”運算符來實現(xiàn)想要的運算順序。注意:在應(yīng)用EL表達(dá)式取值時,沒有數(shù)組的下標(biāo)越界,沒有空指針異常,沒有字符串的拼接。
猜你喜歡