JSF Expression Language 搭配 JSF 標(biāo)簽來使用,是用來存取數(shù)據(jù)對象的一個簡易語言。
JSF EL是以#開始,將變量或表達(dá)式放置在
Unknown macro: { 與 }
之間,例如:
?
變量名稱可以是faces-config.xml中定義的名稱,如果是Bean的話,可以透過使用 '.' 運(yùn)算子來存取它的屬性,例如:
...
<f:view>
<h:outputText value=
"#{userBean.name}"
/>
</f:view>
...
在JSF卷標(biāo)的屬性上," 與 " (或'與')之間如果含有EL,則會加以運(yùn)算,您也可以這么使用它:
...
<f:view>
名稱, 年齡:<h:outputText
value=
"#{userBean.name}, #{userBean.age}"
/>
</f:view>
...
一個執(zhí)行的結(jié)果可能是這樣顯示的:
EL的變量名也可以程序執(zhí)行過程中所宣告的名稱,或是JSF EL預(yù)設(shè)的隱含對象,例如下面的程序使用param隱含對象來取得使用者輸入的參數(shù):
<%@ taglib uri=
"http:
prefix="f" %>
<%@ taglib uri=
"http:
prefix="h" %>
<%@page contentType=
"text/html; charset=Big5"
%>
<html>
<head>
<title></title>
</head>
<body>
<f:view>
<b> 您好, <h:outputText value=
"#{param.name}"
/> </b>
</f:view>
</body>
</html>
param是JSF EL預(yù)設(shè)的隱含對象變量,它代表request所有參數(shù)的集合,實(shí)際是一個java.util.Map型態(tài)對象,JSF所提供的隱含對象,大致上對應(yīng)于
JSP隱含物件
,不過JSF隱含對象移除了pageScope與pageContext,而增加了facesContext與view,它們分別對應(yīng)于 javax.faces.context.FacesContext與javax.faces.component.UIViewRoot。
對于Map型態(tài)對象,我們可以使用 '.' 運(yùn)算子指定key值來取出對應(yīng)的value,也可以使用 [ 與 ] 來指定,例如:
...
<f:view>
<b> 您好, <h:outputText value=
"#{param['name']}"
/> </b>
</f:view>
...
在 [ 與 ] 之間,也可以放置其它的變量值,例如:
...
<f:view>
<h:outputText value=
"#{someBean.someMap[user.name]}"
/>
</f:view>
...
如果變量是List型態(tài)或數(shù)組的話,則可以在 [] 中指定索引,例如:
....
<f:view>
<h:outputText value=
"#{someBean.someList[0]}"
/>
<h:outputText value=
"#{someBean.someArray[1]}"
/>
<h:outputText
value=
"#{someBean.someListOrArray[user.age]}"
/>
</f:view>
....
您也可以指定字面常數(shù),對于true、false、字符串、數(shù)字,JSF EL會嘗試進(jìn)行轉(zhuǎn)換,例如:
....
<h:outputText value=
"#{
true
}"
/>
....
<h:outputText value=
"#{'This is a test'}"
/>
....
如果要輸出字符串,必須以單引號 ' 或雙自變量 " 括住,如此才不會被認(rèn)為是變量名稱。
在宣告變量名稱時,要留意不可與JSF的保留字或關(guān)鍵詞同名,例如不可取以下這些名稱:
true
false
null
div mod and or not eq ne lt gt le ge
instanceof
empty
使用EL,您可以直接實(shí)行一些算術(shù)運(yùn)算、邏輯運(yùn)算與關(guān)系運(yùn)算,其使用就如同在一般常見的程序語言中之運(yùn)算。
算術(shù)運(yùn)算子有:加法 (+), 減法 (-), 乘法 (*), 除法 (/ or div) 與余除 (% or mod) 。下面是算術(shù)運(yùn)算的一些例子:
表達(dá)式 結(jié)果
#{1}
|
1
|
#{1 + 2}
|
3
|
#{1.2 + 2.3}
|
3.5
|
#{1.2E4 + 1.4}
|
12001.4
|
#{-4 - 2}
|
-6
|
#{21 * 2}
|
42
|
#{3/4}
|
0.75
|
#{3 div 4}
|
0.75,除法
|
#{3/0}
|
Infinity
|
#{10%4}
|
2
|
#{10 mod 4}
|
2,也是余除
|
#{(1==2) ? 3 : 4}
|
4
|
如同在Java語法一樣 ( expression ? result1 : result2)是個三元運(yùn)算,expression為true顯示result1,false顯示result2。
邏輯運(yùn)算有:and(或&&)、or(或!!)、not(或!)。一些例子為:
表達(dá)式 結(jié)果
#{true and false}
|
false
|
#{true or false}
|
true
|
#{not true}
|
false
|
關(guān)系運(yùn)算有:小于Less-than (< or lt)、大于Greater-than (> or gt)、小于或等于Less-than-or-equal (<= or le)、大于或等于Greater-than-or-equal (>= or ge)、等于Equal (== or eq)、不等于Not Equal (!= or ne),由英文名稱可以得到lt、gt等運(yùn)算子之縮寫詞,以下是Tomcat的一些例子:
表達(dá)式 結(jié)果
#{1 < 2}
|
true
|
#{1 lt 2}
|
true
|
#{1 > (4/2)}
|
false
|
#{1 > (4/2)}
|
false
|
#{4.0 >= 3}
|
true
|
#{4.0 ge 3}
|
true
|
#{4 <= 3}
|
false
|
#{4 le 3}
|
false
|
#{100.0 == 100}
|
true
|
#{100.0 eq 100}
|
true
|
#{(10*10) != 100}
|
false
|
#{(10*10) ne 100}
|
false
|
左邊是運(yùn)算子的使用方式,右邊的是運(yùn)算結(jié)果,關(guān)系運(yùn)算也可以用來比較字符或字符串,按字典順序來決定比較結(jié)果,例如:
表達(dá)式 結(jié)果
#{'a' < 'b'}
|
true
|
#{'hip' > 'hit'}
|
false
|
#{'4' > 3}
|
true
|
EL運(yùn)算子的執(zhí)行優(yōu)先級與Java運(yùn)算子對應(yīng),如果有疑慮的話,也可以使用括號()來自行決定先后順序。