1. 程式人生 > >jspEl表示式取值

jspEl表示式取值

jsp中${}----是EL表示式的常規表示方式
–>目的是為了獲取{}中指定的物件(引數、物件等)的值
如:
${user.name}<====>User user = (User)request(搜尋範圍).getAttribute(user);
String name = user.getName();
out.println(name);
從當前頁面起開始搜尋 user物件,然後獲取改物件的name屬性值
其搜尋的範圍依次是:page、request、session、application
如果未搜尋到,即會返回null值

它在jsp+servlet的程式設計中經常使用.

 詳解 : EL 是從 JavaScript 指令碼語言得到啟發的一種表示式語言,它借鑑了 JavaScript 多型別轉換無關性的特點。在使用 EL 從 scope 中得到引數時可以自動轉換型別,因此對於型別的限制更加寬鬆。 Web 伺服器對於 request 請求引數通常會以 String 型別來發送,在得到時使用的 Java 語言指令碼就應該是 request.getParameter(“XXX”) ,這樣的話,對於實際應用還必須進行強制型別轉換。而 EL 就將使用者從這種型別轉換的繁瑣工作脫離出來,允許使用者直接使用 EL 表示式取得的值,而不用關心它是什麼型別。 

例 1 :簡單 EL 表示式

<%@ page contentType="text/html; charset=UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
 
<html> 
 <body> 
    ${sampleValue + 1} <br> 
 </body> 
</html> 

這個示例將在 JSP 頁面顯示為“ 1 ”, EL 表示式必須以“ ${XXX} ”來表示,其中“ XXX ”部分就是具體表達式內容,“ ${} ”將這個表示式內容包含在其中作為 EL 表示式的定義。本示例可以在滿足 JSP2.0 規範的任何 Web 應用伺服器中使用。

EL表示式的預設變數
一個 EL 表示式包含變數和操作符兩個內容。任何存在於 JSP 作用範圍的 JavaBean 都可以被轉化成 EL 表示式來使用,它所包含的預設變數如下:
1 .預設變數 pageScope 、 requestScope 、 sessionScope 、 applicationScope
這 4 個預設變數包含 Scope 作用範圍的引數集合,相當於被儲存在 java.util.Map 中的某個引數。

例 2 :使用 sessionScope 變數的 EL 表示式

<%request.getSession().setAttribute("sampleValue", new Integer(10));%> 
 
${sessionScope.sampleValue} 

取得儲存在 Session 中引數的 sessionScope 變數的 EL 表示式,“ . ”是 property 訪問操作符,在這裡表示從 Session 中取得“鍵”為“ sampleValue ”的引數,並顯示出來。顯示結果為“ 10 ”。

2 .預設變數 param 、 paramValues
這兩個預設變數包含請求引數的集合, param 表明請求包含的引數為單一控制元件, paramValues 表明請求包含的引數為控制元件陣列。下面看一個簡單示例 3 :

例 3 :提交請求的頁面和接受的頁面

<%@ page contentType="text/html; charset=UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <body> 
      <form action="SampleJsp.jsp"> 
    <input type="text" name="sampleValue" value="10"> 
    <input type="text" name="sampleValue" value="11"> 
    <input type="text" name="sampleValue" value="12"> 
    <input type="text" name="sampleSingleValue" value="SingleValue"> 
    <input type="submit" value="Submit"> 
    </form> 
 </body> 
</html> 

在這個頁面中定義了兩組控制元件,控制元件名為“ sampleValue ”的是一套控制元件陣列,控制元件名為“ sampleSingleValue ”的是單一控制元件,通過遞交將請求引數傳送到 SampleJsp.jsp 。

<%@ page contentType="text/html; charset=UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <body> 
    ${paramValues.sampleValue[2]} <br> 
    ${param.sampleSingleValue} <br> 
 </body> 
</html> 

這是請求轉發到的頁面,通過 EL 表示式的 paramValues 變數得到控制元件陣列中最後一個控制元件的遞交引數,通過 EL 表示式的 param 變數得到單一控制元件的遞交引數。控制元件陣列引數的 EL 表示式使用“ [] ”來指定陣列下標。本示例將顯示控制元件陣列中最後一個控制元件的值“ 12 ”和單一控制元件的值“ SingleValue ”。

3 .預設變數 header 、 headerValues
這兩個預設變數包含請求引數頭部資訊的集合, header 變量表示單一頭部資訊, headerValues 則表示陣列型的頭部資訊。
4 .預設變數 cookie
包含所有請求的 cookie 集合,集合中的每個物件對應 javax.servlet.http.Cookie 。
5 .預設變數 initParam
包含所有應用程式初始化引數的集合。
6 .預設變數 pageContext
等價於 page 環境類 javax.servlet.jsp.PageContext 的例項,用來提供訪問不同的請求引數。

11 個預設變數幾乎包含了 Web 應用的所有基本操作,若一個表示式不使用這些變數而直接使用引數名,那麼就採用就近原則。該表示式將使用最近取得的引數值。

三.EL表示式的操作符
EL表示式中還有許多操作符可以幫助完成各種所需的操作,之前的示例中“.”、“[]”就是其中的兩個,下面將用表9.1來展示所有操作符及它們各自的功能。
表 9.1 EL 表示式的操作符
操作符
功能和作用
.
訪問一個 bean 屬性或者 Map entry
[]
訪問一個數組或者連結串列元素
()
對子表示式分組,用來改變賦值順序
? :
條件語句,比如:條件 ?ifTrue:ifFalse
如果條件為真,表示式值為前者,反之為後者
+
數學運算子,加操作

數學運算子,減操作或者對一個值取反
*
數學運算子,乘操作
/ 或 div
數學運算子,除操作
% 或 mod
數學運算子,模操作 ( 取餘 )
== 或 eq
邏輯運算子,判斷符號左右兩端是否相等,如果相等返回 true ,否則返回 false
!= 或 ne
邏輯運算子,判斷符號左右兩端是否不相等,如果不相等返回 true ,否則返回 false
< 或 lt
邏輯運算子,判斷符號左邊是否小於右邊,如果小於返回 true ,否則返回 false

或 gt
邏輯運算子,判斷符號左邊是否大於右邊,如果大於返回 true ,否則返回 false
<= 或 le
邏輯運算子,判斷符號左邊是否小於或者等於右邊,如果小於或者等於返回 true ,否則返回 false
= 或 ge
邏輯運算子,判斷符號左邊是否大於或者等於右邊,如果大於或者等於返回 true ,否則返回 false
&& 或 and
邏輯運算子,與操作賦。如果左右兩邊同為 true 返回 true ,否則返回 false
|| 或 or
邏輯運算子,或操作賦。如果左右兩邊有任何一邊為 true 返回 true ,否則返回 false
! 或 not
邏輯運算子,非操作賦。如果對 true 取運算返回 false ,否則返回 true
empty
用來對一個空變數值進行判斷 : null 、一個空 String 、空陣列、 空 Map 、沒有條目的 Collection 集合
func(args)
呼叫方法 , func 是方法名, args 是引數,可以沒有,或者有一個、多個引數 . 引數間用逗號隔開

這些操作符都是極其有用的,下面通過幾個示例來演示它們的使用方法:

例 4 :幾組操作符的示例

${pageScope.sampleValue + 12} <br>           // 顯示 12 
${(pageScope.sampleValue + 12)/3} <br>     // 顯示 4.0 
${(pageScope.sampleValue + 12) /3==4} <br>         // 顯示 true 
${(pageScope.sampleValue + 12) /3>=5} <br>         // 顯示 false 
<input type="text" name="sample1" value="${pageScope.sampleValue + 10}"> // 顯示值為 10 的 Text 控制元件 

可以看到,對於這些示例,程式設計者完全無需管理它們的型別轉換,在表示式內部都已經處理了。有了 EL 表示式,在 JSP 頁面的程式設計變得更靈活,也更容易。