JSTL 除C標籤外的其他幾個標籤

9.7 Functions標籤庫

稱呼Functions標籤庫爲標籤庫,倒不如稱呼其爲函數庫來得更容易理解些。因爲Functions標籤庫並沒有提供傳統的標籤來爲JSP頁面的工作服務,而是被用於EL表達式語句中。在JSP2.0規範下出現的Functions標籤庫爲EL表達式語句提供了許多更爲有用的功能。Functions標籤庫分爲兩大類,共16個函數。

q    長度函數:fn:length

q    字符串處理函數:fn:containsfn:containsIgnoreCasefn:endsWithfn:escapeXmlfn:indexOffn:joinfn:replacefn:splitfn:startsWithfn:substringfn:substringAfterfn:substringBeforefn:toLowerCasefn:toUpperCasefn:trim

以下是各個函數的用途和屬性以及簡單示例。

9.7.1 長度函數fn:length函數

長度函數fn:length的出現有重要的意義。在JSTL1.0中,有一個功能被忽略了,那就是對集合的長度取值。雖然java.util.Collection接口定義了size方法,但是該方法不是一個標準的JavaBean屬性方法(沒有get,set方法),因此,無法通過EL表達式“${collection.size} ”來輕鬆取得。

fn:length函數正是爲了解決這個問題而被設計出來的。它的參數爲input,將計算通過該屬性傳入的對象長度。該對象應該爲集合類型或String類型。其返回結果是一個int類型的值。下面看一個示例。

<%ArrayList arrayList1 = new ArrayList();

              arrayList1.add("aa");

              arrayList1.add("bb");

              arrayList1.add("cc");

%>

<%request.getSession().setAttribute("arrayList1",arrayList1);%>

${fn:length(sessionScope.arrayList1)}

假設一個ArrayList類型的實例“arrayList1 ”,併爲其添加三個字符串對象,使用fn:length函數後就可以取得返回結果爲“3 ”

9.7.2 判斷函數fn:contains函數

fn:contains函數用來判斷源字符串是否包含子字符串。它包括stringsubstring兩個參數,它們都是String類型,分佈表示源字符串和子字符串。其返回結果爲一個boolean類型的值。下面看一個示例。

${fn:contains("ABC", "a")}<br>

${fn:contains("ABC", "A")}<br>

前者返回“false ”,後者返回“true ”

9.7.3 fn:containsIgnoreCase函數

fn:containsIgnoreCase函數與fn:contains函數的功能差不多,唯一的區別是fn:containsIgnoreCase函數對於子字符串的包含比較將忽略大小寫。它與fn:contains函數相同,包括stringsubstring兩個參數,並返回一個boolean類型的值。下面看一個示例。

${fn:containsIgnoreCase("ABC","a")}<br>

${fn:containsIgnoreCase("ABC","A")}<br>

前者和後者都會返回“true ”

9.7.4 詞頭判斷函數fn:startsWith函數

fn:startsWith函數用來判斷源字符串是否符合一連串的特定詞頭。它除了包含一個string參數外,還包含一個subffx參數,表示詞頭字符串,同樣是String類型。該函數返回一個boolean類型的值。下面看一個示例。

${fn:startsWith ("ABC", "ab")}<br>

${fn:startsWith ("ABC", "AB")}<br>

前者返回“false ”,後者返回“true ”

9.7.5 詞尾判斷函數fn:endsWith函數

fn:endsWith函數用來判斷源字符串是否符合一連串的特定詞尾。它與fn:startsWith函數相同,包括stringsubffx兩個參數,並返回一個boolean類型的值。下面看一個示例。

${fn:endsWith("ABC", "bc")}<br>

${fn:endsWith("ABC", "BC")}<br>

前者返回“false ”,後者返回“true ”

9.7.6 字符實體轉換函數fn:escapeXml函數

fn:escapeXml函數用於將所有特殊字符轉化爲字符實體碼。它只包含一個string參數,返回一個String類型的值。

9.7.8 字符匹配函數fn:indexOf函數

fn:indexOf函數用於取得子字符串與源字符串匹配的開始位置,若子字符串與源字符串中的內容沒有匹配成功將返回“-1 ”。它包括stringsubstring兩個參數,返回結果爲int類型。下面看一個示例。

${fn:indexOf("ABCD","aBC")}<br>

${fn:indexOf("ABCD","BC")}<br>

前者由於沒有匹配成功,所以返回-1,後者匹配成功將返回位置的下標,爲1

9.7.9 分隔符函數fn:join函數

fn:join函數允許爲一個字符串數組中的每一個字符串加上分隔符,並連接起來。它的參數、返回結果和描述如表9.25所示:

9.25 fn:join函數

參數

描述

array

字符串數組。其類型必須爲String[]類型

separator

分隔符。其類型必須爲String類型

返回結果

返回一個String類型的值

下面看一個示例。

<% String[] stringArray ={"a","b","c"}; %>

<%request.getSession().setAttribute("stringArray",stringArray);%>

${fn:join(sessionScope.stringArray,"")}<br>

定義數組並放置到Session中,然後通過Session得到該字符串數組,使用fn:join函數並傳入分隔符“; ”,得到的結果爲“a;b;c ”

9.7.10 替換函數fn:replace函數

fn:replace函數允許爲源字符串做替換的工作。它的參數、返回結果和描述如表9.26所示:

9.26 fn:replace函數

參數

描述

inputString

源字符串。其類型必須爲String類型

beforeSubstring

指定被替換字符串。其類型必須爲String類型

afterSubstring

指定替換字符串。其類型必須爲String類型

返回結果

返回一個String類型的值

下面看一個示例。

${fn:replace("ABC","A","B")}<br>

“ABC ”字符串替換爲“BBC ”,在“ABC ”字符串中用“B ”替換了“A ”

9.7.11 分隔符轉換數組函數fn:split函數

fn:split函數用於將一組由分隔符分隔的字符串轉換成字符串數組。它的參數、返回結果和描述如表9.27所示:

9.27 fn:split函數

參數

描述

string

源字符串。其類型必須爲String類型

delimiters

指定分隔符。其類型必須爲String類型

返回結果

返回一個String[]類型的值

下面看一個示例。

${fn:split("A,B,C",",")}<br>

“A,B,C ”字符串轉換爲數組{A,B,C}

9.7.12 字符串截取函數fn:substring函數

fn:substring函數用於截取字符串。它的參數、返回結果和描述如表9.28所示:

9.28 fn:substring函數

參數

描述

string

源字符串。其類型必須爲String類型

beginIndex

指定起始下標(值從0開始)。其類型必須爲int類型

endIndex

指定結束下標(值從0開始)。其類型必須爲int類型

返回結果

返回一個String類型的值

下面看一個示例。

${fn:substring("ABC","1","2")}<br>

截取結果爲“B ”

 

9.7.14 起始到定位截取字符串函數fn:substringBefore函數

fn:substringBefore函數允許截取源字符從開始到某個字符串。它的參數和fn:substringAfter函數相同,不同的是substring表示的是結束字符串。下面看一個示例。

${fn:substringBefore("ABCD","BC")}<br>

截取的結果爲“A ”

9.7.15 小寫轉換函數fn:toLowerCase函數

fn:toLowerCase函數允許將源字符串中的字符全部轉換成小寫字符。它只有一個表示源字符串的參數string,函數返回一個String類型的值。下面看一個示例。

${fn:toLowerCase("ABCD")}<br>

轉換的結果爲“abcd ”

9.7.16大寫轉換函數fn:toUpperCase函數

fn:toUpperCase函數允許將源字符串中的字符全部轉換成大寫字符。它與fn:toLowerCase函數相同,也只有一個String參數,並返回一個String類型的值。下面看一個示例。

${fn:toUpperCase("abcd")}<br>

轉換的結果爲“ABCD ”

9.7.17空格刪除函數fn:trim函數

fn:trim函數將刪除源字符串中結尾部分的空格以產生一個新的字符串。它與fn:toLowerCase函數相同,只有一個String參數,並返回一個String類型的值。下面看一個示例。

${fn:trim("AB C ")}D<br>

轉換的結果爲“AB CD ”,注意,它將只刪除詞尾的空格而不是全部,因此“B ”“C ”之間仍然留有一個空格。

 

9.4  JSTL XML processing標籤庫

在企業級應用越來越依賴XML的今天,XML格式的數據被作爲信息交換的優先選擇。XML processing標籤庫爲程序設計者提供了基本的對XML格式文件的操作。在該標籤庫中的標籤一共有10個,被分爲了三類,分別是:

q    XML核心標籤:<x:parse><x:out><x:set>

q    XML流控制標籤:<x:if><x:choose><x:when><x:otherwise><x:forEach>

q    XML轉換標籤:<x:transform><x:param>

由於該組標籤庫專注於對某一特定領域的實現,因此本書將只選擇其中常見的一些標籤和屬性進行介紹。

9.4.1 用於解析XML文件的<x:parse>標籤

<x:parse>標籤是該組標籤庫的核心,從其標籤名就可以知道,它是作爲解析XML文件而存在的。它的屬性和描述如表9.12所示:

9.12 <x:parse>標籤屬性和說明

屬性

描述

doc

XML的內容,該屬性的內容應該爲String類型或者java.io.Reader的實例,可以用xml屬性來替代,但是不被推薦

var

將解析後的XML保存在該屬性所指定的變量中,之後XML processing標籤庫中的其他標籤若要取XML中的內容就可以從該變量中得到(可選)

scope

變量的作用範圍(可選)

varDom

指定保存的變量爲org.w3c.dom.Document接口類型(可選)

scopeDom

org.w3c.dom.Document的接口類型變量作用範圍(可選)

systemId

定義一個URI,該URI將被使用到XML文件中以接入其他資源文件(可選)

filter

該屬性必須爲org.xml.sax.XMLFilter類的一個實例,可以使用EL表達式傳入,將對XML文件做過濾得到自身需要的部分(可選)

其中,varscopevarDomscopeDom不應該同時出現,而應該被視爲兩個版本來使用,二者的變量都可以被XML processing標籤庫的其他標籤來使用。

<x:parse>標籤單獨使用的情況很少,一般會結合XML processing標籤庫中的其他標籤來一起工作。下面看一個示例。

首先給出一個簡單的XML文件,將對該XML文件做解析,該XML文件名爲SampleXml.xml

<?xml version="1.0"encoding="UTF-8"?>

<xml-body>

    <name>RW</name>

    <passWord>123456</passWord>

    <age>28</age>

    <books>

        <book>book1</book>

        <book>book2</book>

        <book>book3</book>

    </books>

</xml-body>

標籤庫的工作:

<c:import var="xmlFile"url="http://localhost:8080/booksamplejstl/SampleXml.xml"/>

<x:parse var="xmlFileValue"doc="${xmlFile}"/>

9.5  I18Nformatting標籤庫

看到I18N就應該想到知識國際化I18N formatting標籤庫就是用於在JSP頁面中做國際化的動作。在該標籤庫中的標籤一共有12個,被分爲了兩類,分別是:

q    國際化核心標籤:<fmt:setLocale><fmt:bundle><fmt:setBundle><fmt:message><fmt:param><fmt:requestEncoding>

q    格式化標籤:<fmt:timeZone><fmt:setTimeZone><fmt:formatNumber><fmt:parseNumber><fmt:formatDate><fmt:parseDate>

下面只選擇其中常見的一些標籤和屬性進行介紹。

9.5.1 用於設置本地化環境的<fmt:setLocale>標籤

<fmt:setLocale>標籤用於設置Locale環境。它的屬性和描述如表9.17所示:

9.17 <fmt:setLocale>標籤屬性和說明

屬性

描述

value

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章