EL表達式的應用

關鍵字:   jsp    

the JavaServer Pages Standard Tag Library (JSTL)
JSP Standard Tag Library (JSTL)
EL(expression language)表達式

EL 表達式的格式是這樣的:用美元符號($)定界,內容包括在花括號({})中。
清單 1. 說明 EL 表達式定界符的 JSTL 操作
<c:out value="${user.firstName}"/>;
此外,您可以將多個表達式與靜態文本組合在一起以通過字符串並置來構造動態屬性值,如清單 4 所示。單獨的表達式由標識符、存取器、文字和運算符組成。標識符用來引用存儲在數據中心中的數據對象。EL 有 11 個保留標識符,對應於 11 個 EL 隱式對象。假定所有其它標識符都引用限制了作用域的變量。存取器用來檢索對象的特性或集合的元素。文字表示固定的值 — 數字、字符、字符串、布爾型或空值。運算符允許對數據和文字進行組合以及比較。
清單 2. 組合靜態文本和多個 EL 表達式以指定動態屬性值
<c:out value="Hello ${user.firstName} ${user.lastName}"/>;
隱式對象
表 1 中列出了 11 個 EL 隱式對象的標識符。不要將這些對象與 JSP 隱式對象(一共只有九個)混淆,其中只有一個對象是它們所共有的。

表 1. EL 隱式對象
類別 標識符 描述
JSP pageContext PageContext 實例對應於當前頁面的處理
作用域 pageScope 與頁面作用域屬性的名稱和值相關聯的 Map 類
requestScope 與請求作用域屬性的名稱和值相關聯的 Map 類
sessionScope 與會話作用域屬性的名稱和值相關聯的 Map 類
applicationScope 與應用程序作用域屬性的名稱和值相關聯的 Map 類
請求參數 param 按名稱存儲請求參數的主要值的 Map 類
paramValues 將請求參數的所有值作爲 String 數組存儲的 Map 類
請求頭 header 按名稱存儲請求頭主要值的 Map 類
headerValues 將請求頭的所有值作爲 String 數組存儲的 Map 類
Cookie cookie 按名稱存儲請求附帶的 cookie 的 Map 類
初始化參數 initParam 按名稱存儲 Web 應用程序上下文初始化參數的 Map 類

儘管 JSP 和 EL 隱式對象中只有一個公共對象(pageContext),但通過 EL 也可以訪問其它 JSP 隱式對象。原因是 pageContext 擁有訪問所有其它八個 JSP 隱式對象的特性。實際上,這是將它包括在 EL 隱式對象中的主要理由。

其餘所有 EL 隱式對象都是映射,可以用來查找對應於名稱的對象。前四個映射表示先前討論的各種屬性作用域。可以用它們來查找特定作用域中的標識符,而不用依賴於 EL 在缺省情況下使用的順序查找過程。

接下來的四個映射用來獲取請求參數和請求頭的值。因爲 HTTP 協議允許請求參數和請求頭具有多個值,所以它們各有一對映射。每對中的第一個映射返回請求參數或頭的主要值,通常是恰巧在實際請求中首先指定的那個值。每對中第二個映射允許檢索參數或頭的所有值。這些映射中的鍵是參數或頭的名稱,但這些值是 String 對象的數組,其中的每個元素都是單一參數值或頭值。

cookie 隱式對象提供了對由請求設置的 cookie 名稱的訪問。這個對象將所有與請求相關聯的 cookie 名稱映射到表示那些 cookie 特性的 Cookie 對象。

最後一個 EL 隱式對象 initParam 是一個映射,它儲存與 Web 應用程序相關聯的所有上下文的初始化參數的名稱和值。初始化參數是通過 web.xml 部署描述符文件指定的,該文件位於應用程序的 WEB-INF 目錄中。
最終,EL 還包括了幾個用來操作和比較 EL 表達式所訪問數據的運算符。表 2 中彙總了這些運算符。

表 2. EL 運算符

類別 運算符
算術運算符 +、-、*、/(或 div)和 %(或 mod)
關係運算符 ==(或 eq)、!=(或 ne)、<</code>;(或 lt)、>;(或 gt)、<=(或 le)和

>;=(或 ge)
邏輯運算符 &&(或 and)、||(或 or)和 !(或 not)
驗證運算符 empty
清單 3. 利用算術運算符的 EL 表達式
${item.price * (1 + taxRate[user.address.zipcode])}
清單 4. 利用關係和邏輯運算符的 EL 表達式
${(x >;= min) && (x <= max)}
表 3. EL 運算符優先級(自頂到底,從左到右)

[], .
()
unary -、not、!、empty
*、/、div、%、mod
+、binary -
() <</code>;、>;、<=、>;=、lt、gt、le、ge
==、!=、eq、ne
&&、and
||、or
清單 5. 用於 JSTL core 庫 EL 版本的 taglib 僞指令
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>;
?

這個問題一般是由於你使用的jstl版本造成的。
你的頁面應該會包含如下代碼:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
這是最新版的jstl 1.1路徑,而如果你使用的是舊版1.0的則需要把路徑中的jsp去掉,如下:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>

關鍵字:   Tag標籤    
EL腳本語言的配置和支持:
對於一個單個JSP頁面,你可以使用定義page指令來設置jsp頁面是否支持EL。默認是支持EL(如果要頁面不支持EL,請設置爲isELIgnored=true;
  1. <%@ page isELIgnored="true|false"%>

  1. 對於整個JSP應用程序,要修改WEB.XML配置(tomcat5.0.16默認是支持EL的);
  2. 〈jsp-property-group>
    〈description> For config the ICW sample application 〈/description>
    〈display-name>JSPConfiguration 〈/display-name>
    〈url-pattern>/jsp/datareset.jsp 〈/url-pattern>
    〈el-ignored>true< / el-ignored> 〈 / el-ignored>
    〈page-encoding>ISO-8859-1〈/page-encoding>
    〈scripting-invalid>true〈/scripting-invalid>
    〈include-prelude>/jsp/prelude.jspf〈/include-prelude>
    〈include-coda>/jsp/coda.jspf〈/include-coda>
    〈/jsp-property-group>

  1. 算術運算符演示:
    以下是EL運算符列表,其中empty可以檢查某個值是否爲空
  1. 運算符
說明 運算符 說明

+

> 或 gt 大於

-

<= 或 le 小於等於

*

>= 或 ge 大於等於

/ 或 div

&& 或 and 邏輯與

% 或 mod

模(求餘)

|| 或 or 邏輯或

== 或 =

等於

! 或 not 邏輯非

!=

不等於

empty 檢查是否爲空值

< 或 lt

小於

a ? b : c 條件運算符
  1. EL表達式使用簡單,在網頁中"${}"表示是EL表達式。${1+1} 顯示爲 2
  1. EL算術表達式
運算結果 EL 關係運算表達式 運算結果
${1} 1 ${1 < 2} true
${1 + 2} 3 ${1 lt 2} true
${1.2 + 2.3} 3.5 ${1 > (4/2)} false
${-4 - 2} -6 ${4.0 >= 3} true
${21 * 2} 42 ${4.0 ge 3} true
${10%4} 2 ${100.0 eq 100} true
${10 mod 4} 2 ${(10*10) != 100} false
${(1==2) ? 3 : 4} 4 ${(10*10) ne 100} false

 

  1. 隱含對象數據演示:
  2. EL 表達式定義了11個隱含對象,使用這11個對象可以很方便的讀取到session,cookie,HttpHeader,用戶提交表單(param)等
  1. 隱含對象

內容

applicationScope

應用程序範圍內的scoped變量組成的集合

cookie

所有cookie組成的集合

header

HTTP請求頭部,字符串

headerValues

HTTP請求頭部,字符串集合

initParam

全部應用程序參數名組成的集合

pageContext

當前頁面的javax.servlet.jsp.PageContext對象

pageScope

頁面範圍內所有對象的集合

param

所有請求參數字符串組成的集合

paramValues

所有作爲字符串集合的請求參數

requestScope

所有請求範圍的對象的集合

sessionScope

所有會話範圍的對象的集合

  1. 下面是獲取HTTP訪問頭部數據和用戶提交數據的示例
  1. EL表達式
運算結果
${header["host"]}
這裏得到HTTP連接頭部的host值
${header["accept"]} 這裏獲得HTTP頭部的accept值
${header["user-agent"]} 這裏獲得HTTP頭部的user-agent值
以下可以讀取用戶提交的信息,假設用戶提交信息爲 ?name=myname&alies=now.net.cn(這裏有兩種訪問方式,一種是使用[]來進行訪問,另外一種是使用.來進行訪問,兩種訪問效果是一樣的。)
${param["name"] } myname
${param.name} myname
${param["alies"] } now.net.cn
${param.alies} now.net.cn
eg: ${empty(requestScope.backpath)?'admin_TcAction.do?method=findFinish':requestScope.backpath}
 
發佈了14 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章