天天看點

EL表達式講解

EL表達式簡介

EL 全名為Expression Language。

EL主要作用:

  • 擷取資料:

           EL表達式主要用于替換JSP頁面中的腳本表達式,以從各種類型的web域 中檢索java對象、擷取資料。(某個web域 中的對象,通路javabean的屬性、通路list集合、通路map集合、通路數組)

  • 執行運算:

           利用EL表達式可以在JSP頁面中執行一些基本的關系運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}

  • 擷取web開發常用對象

           EL 表達式定義了一些隐式對象,利用這些隐式對象,web開發人員可以很輕松獲得對web常用對象的引用,進而獲得這些對象中的資料。

  • 調用Java方法

           EL表達式允許使用者開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。

擷取資料

  • 使用EL表達式擷取資料文法:“${辨別符}”
  • EL表達式語句在執行時,會調用pageContext.findAttribute方法,用辨別符為關鍵字,分别從page、request、session、application四個域中查找相應的對象,找到則傳回相應對象,找不到則傳回”” (注意,不是null,而是空字元串)。 如:${user}
  • EL表達式也可以很輕松擷取JavaBean的屬性,或擷取數組、Collection、Map類型集合的資料

例如:

${user.address.city}:獲得user對象的address對象的city的值;
${user.list[]}:通路有序集合某個位置的元素
${map.key} : 獲得map集合中指定key的值
           
  • . 和 [ ] 差別

    EL 提供“.“和“[ ]“兩種運算符來存取資料。當要存取的屬性名稱中包含一些特殊字元,如.或?等并非字母或數字的符号,就要使用“[ ]“。

    例如:

    ${user.user-name} 應當改為 ${user["user-name"] }"

如果要動态取值時,就可以用“[ ]“來做,而“.“無法做到動态取值。

例如: ${sessionScope.user[data]}中data 是一個變量

  • 結合JSTL的foreach标簽,使用EL表達式也可以很輕松疊代各種類型的數組或集合

    示例: 疊代數組

    疊代collection類型集合

    疊代map類型集合

執行運算

  • 在el表達式中,還能執行相應的運算,文法:${運算表達式},EL表達式支援如下運算符:
    EL表達式講解
    EL表達式講解

    empty運算符:檢查對象是否為null或“空

    例如:

    • ${empty user}:如果為空傳回true,否則傳回false;
    • ${not emtype user}:與empty正好相反。
    二進制表達式:${user!=null?user.name : “” }

EL表達式保留關鍵字

EL表達式講解

保留字的意思是指變量在命名時,應該避開上述的名字,以免程式編譯時發生錯誤

獲得web對象

EL表達式語言中定義了11個隐含對象,使用這些隐含對象可以很友善地擷取web開發中的一些常見對象,并讀取這些對象的資料。

文法:${隐式對象名稱} :獲得對象的引用

EL表達式講解
EL表達式講解

注意:

headerValues:

如果頭裡面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]

cookie:

例${cookie.key}取的是cookie對象,如通路cookie的名稱和值,須${cookie.key.name}或${cookie.key.value}

使用EL調用Java方法

EL表達式文法允許開發人員開發自定義函數,以調用Java類的方法。

示例:
  • ${prefix:method(params)}
  • 在EL表達式中調用的隻能是Java類的靜态方法。
  • 這個Java類的靜态方法需要在TLD檔案中描述,才可以被EL表達式調用。
  • EL自定義函數用于擴充EL表達式的功能,可以讓EL表達式完成普通Java程式代碼所能完成的功能

EL Function開發步驟

EL允許程式員自定義Function,一實作更多的功能,例如:防止表單的重複送出、将html轉義等。

一般來說, EL自定義函數開發與應用包括以下三個步驟:

1. 編寫一個Java類的靜态方;

2. 編寫标簽庫描述符(tld)檔案,在tld檔案中描述自定義函數;

3. 在JSP頁面中導入和使用自定義函數。

  • 編寫完标簽庫描述檔案後,需要将它放置到

EL函數庫

在JSP頁面中顯示資料時,經常需要對顯示的字元串進行處理,SUN公司針對于一些常見處理定義了一套EL函數庫供開發者使用。

這些EL函數在JSTL開發包中進行描述,是以在JSP頁面中使用SUN公司的EL函數庫,需要導入JSTL開發包,并在頁面中導入EL函數庫,如下所示:

在頁面中使用JSTL定義的EL函數:

<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>

fn:toLowerCase

将一個字元串中包含的所有字元轉換為小寫形式,并傳回轉換後的字元串,它接收一個字元串類型的參數,例如:

fn:toLowerCase(“Www.BAIDU.COM”) 的傳回值為字元串“www.baidu.com”

fn:toLowerCase(“”)的傳回值為空字元串

fn:toUpperCase

将一個字元串中包含的所有字元轉換為大寫形式,并傳回轉換後的字元串,它接收一個字元串類型的參數。例如:

fn:toUpperCase(“Www.baidu.com”) 的傳回值為字元串“WWW.BAIDU.COM”

fn:toUpperCase(“”)的傳回值為空字元串

fn:trim

删除一個字元串的首尾的空格,并傳回删除空格後的結果字元串,它接收一個字元串類型的參數。需要注意的是,fn:trim函數不能删除字元串中間位置的空格。

例如:fn:trim(” www.baidu.com “) 的傳回值為字元串“www.baidu.com”。

fn:length

  • 傳回一個集合或數組大小,或傳回一個字元串中包含的字元的個數,傳回值為int類型。fn:length函數接收一個參數,這個參數可以是标簽的items屬性支援的任何類型,包括任意類型的數組、java.util.Collection、java.util.Iterator、java.util.Enumeration、java.util.Map等類的執行個體對象和字元串。
  • 如果fn:length函數的參數為null或者是元素個數為0的集合或數組對象,則函數傳回0;如果參數是空字元串,則函數傳回0。

fn:split

  • fn:split函數以指定字元串作為分隔符,将一個字元串分割成字元串數組并傳回這個字元串數組。
  • fn:split函數接收兩個字元串類型的參數,第一個參數表示要分割的字元串,第二個參數表示作為分隔符的字元串。
  • 例如,fn:split(“www.baidu.com”, “.”)[1]的傳回值為字元串“baidu”。

fn:join

  • fn:join函數以一個字元串作為分隔符,将一個字元串數組中的所有元素合并為一個字元串并傳回合并後的結果字元串。fn:join函數接收兩個參數,第一個參數是要操作的字元串數組,第二個參數是作為分隔符的字元串。
  • 如果fn:join函數的第二個參數是空字元串,則fn:join函數的傳回值直接将元素連接配接起來。

    例如:

         假設stringArray是儲存在Web域中的一個屬性,它表示一個值為{“www”,”baidu”,”com”}的字元串數組,則fn:join(stringArray, “.”)傳回字元串“www.baidu.com”

         fn:join(fn:split(“www,baidun,com”, “,”), “.”) 的傳回值為字元串“www.baidun.com”

fn:indexOf

  • 傳回指定字元串在一個字元串中第一次出現的索引值,傳回值為int類型。
  • fn:indexOf函數接收兩個字元串類型的參數,如果第一個參數字元串中包含第二個參數字元串,那麼,不管第二個參數字元串在第一個參數字元串中出現幾次,fn:indexOf函數總是傳回第一次出現的索引值;如果第一個參數中不包含第二個參數,則fn:indexOf函數傳回-1。如果第二個參數為空字元串,則fn:indexOf函數總是傳回0。

    例如:fn:indexOf(“www.baidu.com”,”ai”) 的傳回值為5

fn:contains

  • fn:contains函數檢測一個字元串中是否包含指定的字元串,傳回值為布爾類型。
  • fn:contains函數在比較兩個字元串是否相等時是大小寫敏感的。
  • fn:contains函數接收兩個字元串類型的參數,如果第一個參數字元串中包含第二個參數字元串,則fn:contains函數傳回true,否則傳回false。如果第二個參數的值為空字元串,則fn:contains函數總是傳回true。實際上,fn:contains(string, substring)等價于fn:indexOf(string, substring) != -1。

fn:containsIgnoreCase

忽略大小的EL函數

fn:startsWith

  • fn:startsWith函數用于檢測一個字元串是否是以指定字元串開始的,傳回值為布爾類型。
  • fn:startsWith函數接收兩個字元串類型的參數,如果第一個參數字元串以第二個參數字元串開始,則函數傳回true,否則函數傳回false。如果第二個參數為空字元串,則fn:startsWith函數總是傳回true。例如:

    fn:startsWith(“www.baidu.com”,”bai”)的傳回值為false

  • 與之對應的EL函數:fn:endsWith

fn:replace

  • 将一個字元串中包含的指定子字元串替換為其它的指定字元串,并傳回替換後的結果字元串。fn:replace方法接收三個字元串類型的參數,第一個參數表示要操作的源字元串,第二個參數表示源字元串中要被替換的子字元串,第三個參數表示要被替換成的字元串。例如:

    fn:replace(“www baidu com”, ” “, “.”)的傳回值為字元串“www.baidu.com”

fn:substring

  • 用于截取一個字元串的子字元串并傳回截取到的子字元串。fn:substring函數接收三個參數,第一個參數是用于指定要操作的源字元串,第二個參數是用于指定截取子字元串開始的索引值,第三個參數是用于指定截取子字元串結束的索引值,第二個參數和第三個參數都是int類型,其值都從0開始。例如:fn:substring(“www.baidu.com”, 4, 9) 的傳回值為字元串“baidu”

fn:substringAfter

  • 用于截取并傳回一個字元串中的指定子字元串第一次出現之後的子字元串。
  • 接收兩個字元串類型的參數,第一個參數表示要操作的源字元串,第二個參數表示指定的子字元串,例如:fn:substringAfter(“www.baidu.com”, “.”)的傳回值為字元串“baidu.com”。
  • 與之對應的EL函數為:fn:substringBefore,傳回之前的子字元串

繼續閱讀