稱呼
Functions
標簽庫為標簽庫,倒不如稱呼其為函數(shù)庫來得更容易理解些。因為
Functions
標簽庫并沒有提供傳統(tǒng)的標簽來為
JSP
頁面的工作服務(wù),而是被用于
EL
表達式語句中。在
JSP2.0
規(guī)范下出現(xiàn)的
Functions
標簽庫為
EL
表達式語句提供了許多更為有用的功能。
Functions
標簽庫分為兩大類,共
16
個函數(shù)。
q????????
長度函數(shù):
fn:length
q????????
字符串處理函數(shù):
fn:contains
、
fn:containsIgnoreCase
、
fn:endsWith
、
fn:escapeXml
、
fn:indexOf
、
fn:join
、
fn:replace
、
fn:split
、
fn:startsWith
、
fn:substring
、
fn:substringAfter
、
fn:substringBefore
、
fn:toLowerCase
、
fn:toUpperCase
、
fn:trim
以下是各個函數(shù)的用途和屬性以及簡單示例。
9.7.1?
長度函數(shù)
fn:length
函數(shù)
長度函數(shù)
fn:length
的出現(xiàn)有重要的意義。在
JSTL1.0
中,有一個功能被忽略了,那就是對集合的長度取值。雖然
java.util.Collection
接口定義了
size
方法,但是該方法不是一個標準的
JavaBean
屬性方法(沒有
get,set
方法),因此,無法通過
EL
表達式“
${collection.size}
”來輕松取得。
fn:length
函數(shù)正是為了解決這個問題而被設(shè)計出來的。它的參數(shù)為
input
,將計算通過該屬性傳入的對象長度。該對象應(yīng)該為集合類型或
String
類型。其返回結(jié)果是一個
int
類型的值。下面看一個示例。
<%ArrayList arrayList1 = new ArrayList();
??????????????????????????? arrayList1.add("aa");
??????????????????????????? arrayList1.add("bb");
??????????????????????????? arrayList1.add("cc");
%>
<%request.getSession().setAttribute("arrayList1", arrayList1);%>
${fn:length(sessionScope.arrayList1)}
假設(shè)一個
ArrayList
類型的實例“
arrayList1
”,并為其添加三個字符串對象,使用
fn:length
函數(shù)后就可以取得返回結(jié)果為“
3
”。
9.7.2?
判斷函數(shù)
fn:contains
函數(shù)
fn:contains
函數(shù)用來判斷源字符串是否包含子字符串。它包括
string
和
substring
兩個參數(shù),它們都是
String
類型,分布表示源字符串和子字符串。其返回結(jié)果為一個
boolean
類型的值。下面看一個示例。
${fn:contains("ABC", "a")}<br>
${fn:contains("ABC", "A")}<br>
前者返回“
false
”,后者返回“
true
”。
fn:containsIgnoreCase
函數(shù)與
fn:contains
函數(shù)的功能差不多,唯一的區(qū)別是
fn:containsIgnoreCase
函數(shù)對于子字符串的包含比較將忽略大小寫。它與
fn:contains
函數(shù)相同,包括
string
和
substring
兩個參數(shù),并返回一個
boolean
類型的值。下面看一個示例。
${fn:containsIgnoreCase("ABC", "a")}<br>
${fn:containsIgnoreCase("ABC", "A")}<br>
前者和后者都會返回“
true
”。
9.7.4?
詞頭判斷函數(shù)
fn:startsWith
函數(shù)
fn:startsWith
函數(shù)用來判斷源字符串是否符合一連串的特定詞頭。它除了包含一個
string
參數(shù)外,還包含一個
subffx
參數(shù),表示詞頭字符串,同樣是
String
類型。該函數(shù)返回一個
boolean
類型的值。下面看一個示例。
${fn:startsWith ("ABC", "ab")}<br>
${fn:startsWith ("ABC", "AB")}<br>
前者返回“
false
”,后者返回“
true
”。
9.7.5?
詞尾判斷函數(shù)
fn:endsWith
函數(shù)
fn:endsWith
函數(shù)用來判斷源字符串是否符合一連串的特定詞尾。它與
fn:startsWith
函數(shù)相同,包括
string
和
subffx
兩個參數(shù),并返回一個
boolean
類型的值。下面看一個示例。
${fn:endsWith("ABC", "bc")}<br>
${fn:endsWith("ABC", "BC")}<br>
前者返回“
false
”,后者返回“
true
”。
9.7.6?
字符實體轉(zhuǎn)換函數(shù)
fn:escapeXml
函數(shù)
fn:escapeXml
函數(shù)用于將所有特殊字符轉(zhuǎn)化為字符實體碼。它只包含一個
string
參數(shù),返回一個
String
類型的值。
9.7.8?
字符匹配函數(shù)
fn:indexOf
函數(shù)
fn:indexOf
函數(shù)用于取得子字符串與源字符串匹配的開始位置,若子字符串與源字符串中的內(nèi)容沒有匹配成功將返回“
-1
”。它包括
string
和
substring
兩個參數(shù),返回結(jié)果為
int
類型。下面看一個示例。
${fn:indexOf("ABCD","aBC")}<br>
${fn:indexOf("ABCD","BC")}<br>
前者由于沒有匹配成功,所以返回
-1
,后者匹配成功將返回位置的下標,為
1
。
9.7.9?
分隔符函數(shù)
fn:join
函數(shù)
fn:join
函數(shù)允許為一個字符串數(shù)組中的每一個字符串加上分隔符,并連接起來。它的參數(shù)、返回結(jié)果和描述如表
9.25
所示:
表
9.25
fn:join
函數(shù)
參數(shù)
|
描述
|
array
|
字符串數(shù)組。其類型必須為
String[]
類型
|
separator
|
分隔符。其類型必須為
String
類型
|
返回結(jié)果
|
返回一個
String
類型的值
|
下面看一個示例。
<% String[] stringArray = {"a","b","c"}; %>
<%request.getSession().setAttribute("stringArray", stringArray);%>
${fn:join(sessionScope.stringArray,";")}<br>
定義數(shù)組并放置到
Session
中,然后通過
Session
得到該字符串數(shù)組,使用
fn:join
函數(shù)并傳入分隔符“
;
”,得到的結(jié)果為“
a;b;c
”。
9.7.10?
替換函數(shù)
fn:replace
函數(shù)
fn:replace
函數(shù)允許為源字符串做替換的工作。它的參數(shù)、返回結(jié)果和描述如表
9.26
所示:
表
9.26
fn:replace
函數(shù)
參數(shù)
|
描述
|
inputString
|
源字符串。其類型必須為
String
類型
|
beforeSubstring
|
指定被替換字符串。其類型必須為
String
類型
|
afterSubstring
|
指定替換字符串。其類型必須為
String
類型
|
返回結(jié)果
|
返回一個
String
類型的值
|
下面看一個示例。
${fn:replace("ABC","A","B")}<br>
將“
ABC
”字符串替換為“
BBC
”,在“
ABC
”字符串中用“
B
”替換了“
A
”。
9.7.11?
分隔符轉(zhuǎn)換數(shù)組函數(shù)
fn:split
函數(shù)
fn:split
函數(shù)用于將一組由分隔符分隔的字符串轉(zhuǎn)換成字符串數(shù)組。它的參數(shù)、返回結(jié)果和描述如表
9.27
所示:
表
9.27
fn:split
函數(shù)
參數(shù)
|
描述
|
string
|
源字符串。其類型必須為
String
類型
|
delimiters
|
指定分隔符。其類型必須為
String
類型
|
返回結(jié)果
|
返回一個
String[]
類型的值
|
下面看一個示例。
${fn:split("A,B,C",",")}<br>
將“
A,B,C
”字符串轉(zhuǎn)換為數(shù)組
{A,B,C}
。
9.7.12?
字符串截取函數(shù)
fn:substring
函數(shù)
fn:substring
函數(shù)用于截取字符串。它的參數(shù)、返回結(jié)果和描述如表
9.28
所示:
表
9.28
fn:substring
函數(shù)
參數(shù)
|
描述
|
string
|
源字符串。其類型必須為
String
類型
|
beginIndex
|
指定起始下標(值從
0
開始)。其類型必須為
int
類型
|
endIndex
|
指定結(jié)束下標(值從
0
開始)。其類型必須為
int
類型
|
返回結(jié)果
|
返回一個
String
類型的值
|
下面看一個示例。
${fn:substring("ABC","1","2")}<br>
截取結(jié)果為“
B
”。
9.7.14?
起始到定位截取字符串函數(shù)
fn:substringBefore
函數(shù)
fn:substringBefore
函數(shù)允許截取源字符從開始到某個字符串。它的參數(shù)和
fn:substringAfter
函數(shù)相同,不同的是
substring
表示的是結(jié)束字符串。下面看一個示例。
${fn:substringBefore("ABCD","BC")}<br>
截取的結(jié)果為“
A
”。
9.7.15?
小寫轉(zhuǎn)換函數(shù)
fn:toLowerCase
函數(shù)
fn:toLowerCase
函數(shù)允許將源字符串中的字符全部轉(zhuǎn)換成小寫字符。它只有一個表示源字符串的參數(shù)
string
,函數(shù)返回一個
String
類型的值。下面看一個示例。
${fn:toLowerCase("ABCD")}<br>
轉(zhuǎn)換的結(jié)果為“
abcd
”。
9.7.16
大寫轉(zhuǎn)換函數(shù)
fn:toUpperCase
函數(shù)
fn:toUpperCase
函數(shù)允許將源字符串中的字符全部轉(zhuǎn)換成大寫字符。它與
fn:toLowerCase
函數(shù)相同,也只有一個
String
參數(shù),并返回一個
String
類型的值。下面看一個示例。
${fn:toUpperCase("abcd")}<br>
轉(zhuǎn)換的結(jié)果為“
ABCD
”。
9.7.17
空格刪除函數(shù)
fn:trim
函數(shù)
fn:trim
函數(shù)將刪除源字符串中結(jié)尾部分的“空格”以產(chǎn)生一個新的字符串。它與
fn:toLowerCase
函數(shù)相同,只有一個
String
參數(shù),并返回一個
String
類型的值。下面看一個示例。
${fn:trim("AB C?")}D<br>
轉(zhuǎn)換的結(jié)果為“
AB CD
”,注意,它將只刪除詞尾的空格而不是全部,因此“
B
”和“
C
”之間仍然留有一個空格。