EL 全名為Expression Language
EL 語法很簡單,它最大的特點就是使用上很方便。接下來介紹EL主要的語法結構:
${sessionScope.user.sex}
所有EL都是以${為起始、以}為結尾的。上述EL范例的意思是:從Session的范圍中,取得
用戶的性別。假若依照之前JSP Scriptlet的寫法如下:
User user =(User)session.getAttribute("user");
String sex =user.getSex( );
兩者相比較之下,可以發現EL 的語法比傳統JSP Scriptlet 更為方便、簡潔。
EL表達式是配合JSTL使用的。你需要引入JSTL標簽庫(<c:forEach items=""></c:forEach>,<c:if test=""></c:if>等屬於jstl表達式)
<%@taglib uri=" jsp標簽的命名空間 " prefix="c"%>
.與 [ ] 運算符
EL 提供 . 和 [ ] 兩種運算符來導航數據。下列兩者所代表的意思是一樣的:
${sessionScope.user.sex}等於${sessionScope.user["sex"]}
. 和 [ ] 也可以同時混合使用,如下:
${sessionScope.shoppingCart[0].price}
回傳結果為shoppingCart中第一項物品的價格。
不過,以下兩種情況,兩者會有差異:
(1) 當要存取的屬性名稱中包含一些特殊字符,如. 或 – 等並非字母或數字的符號,就一定要使用 [ ],
例如:${user.My-Name }
上述是不正確的方式,應當改為:${user["My-Name"] }
(2) 我們來考慮下列情況:
${sessionScope.user[data]}
此時,data 是一個變量,假若data的值為"sex"時,那上述的例子等於${sessionScope.user.sex};
假若data 的值為"name"時,它就等於${sessionScope.user.name}。
因此,如果要動態取值時,就可以用上述的方法來做,但無法做到動態取值。
EL 變量
EL 存取變量數據的方法很簡單,例如:${username}。它的意思是取出某一范圍中名稱為username的變量。
因為我們並沒有指定哪一個范圍的username,所以它的默認值會先從Page 范圍找,假如找不到,
再依序到Request、Session、Application范圍。假如途中找到username,就直接回傳,不再繼續找下去,
但是假如全部的范圍都沒有找到時,就回傳null,當然EL表達式還會做出優化,頁面上顯示空白,而不是打印輸出NULL。