在jstl中的fn標籤也是咱們在網頁設計中常常要用到的很關鍵的標籤,在使用的時候要先加上頭html
<%@ taglib uri=" http://java.sun.com/jsp/jstl/functions " prefix="fn"%>就可使用fn標籤了。java
具體使用方法請參見下表:數組
|
稱呼Functions標籤庫爲標籤庫,倒不如稱呼其爲函數庫來得更容易理解些。由於Functions標籤庫並無提供傳統的標籤來爲JSP頁面的工做服務,而是被用於EL表達式語句中。在JSP2.0規範下出現的Functions標籤庫爲EL表達式語句提供了許多更爲有用的功能。Functions標籤庫分爲兩大類,共16個函數。
長度函數:fn:length
字符串處理函數: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
如下是各個函數的用途和屬性以及簡單示例。
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」 。
2. 判斷函數fn:contains 函數
fn:contains 函數用來判斷源字符串是否包含子字符串。它包括string 和substring 兩個參數,它們都是String類型,分佈表示源字符串和子字符串。其返回結果爲一個boolean 類型的值。下面看一個示例。
$ {fn:contains("ABC", "a")}<br>
$ {fn:contains("ABC", "A")}<br>
前者返回「false」 ,後者返回「true」 。
3. fn:containsIgnoreCase 函數
fn:containsIgnoreCase 函數與fn:contains 函數的功能差很少,惟一的區別是fn:containsIgnoreCase 函數對於子字符串的包含比較將忽略大小寫。它與 fn:contains 函數相同,包括string 和substring 兩個參數,並返回一個boolean 類型的值。下面看一個示例。
$ {fn:containsIgnoreCase("ABC", "a")}<br>
$ {fn:containsIgnoreCase("ABC", "A")}<br>
前者和後者都會返回「true」 。
4. 詞頭判斷函數fn:startsWith 函數
fn:startsWith 函數用來判斷源字符串是否符合一連串的特定詞頭。它除了包含一個string 參數外,還包含一個subffx 參數,表示詞頭字符串,一樣是String 類型。該函數返回一個boolean 類型的值。下面看一個示例。
$ {fn:startsWith ("ABC", "ab")}<br>
$ {fn:startsWith ("ABC", "AB")}<br>
前者返回「false」 ,後者返回「true」 。
5. 詞尾判斷函數fn:endsWith 函數
fn:endsWith 函數用來判斷源字符串是否符合一連串的特定詞尾。它與fn:startsWith 函數相同,包括string 和subffx 兩個參數,並返回一個boolean 類型的值。下面看一個示例。
$ {fn:endsWith("ABC", "bc")}<br> $ {fn:endsWith("ABC", "BC")}<br>
前者返回「false」 ,後者返回「true」 。
6. 字符實體轉換函數fn:escapeXml 函數
fn:escapeXml 函數用於將全部特殊字符轉化爲字符實體碼。它只包含一個string 參數,返回一個String 類型的值。
7. 字符匹配函數fn:indexOf 函數
fn:indexOf 函數用於取得子字符串與源字符串匹配的開始位置,若子字符串與源字符串中的內容沒有匹配成功將返回「-1」 。它包括string 和substring 兩個參數,返回結果爲int 類型。下面看一個示例。
$ {fn:indexOf("ABCD","aBC")}<br> $ {fn:indexOf("ABCD","BC")}<br>
前者因爲沒有匹配成功,因此返回-1 ,後者匹配成功將返回位置的下標,爲1 。
8. 分隔符函數fn:join 函數
fn:join 函數容許爲一個字符串數組中的每個字符串加上分隔符,並鏈接起來。它的參數、返回結果和描述如表所示:
表 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. 替換函數fn:replace 函數
fn:replace 函數容許爲源字符串作替換的工做。它的參數、返回結果和描述如表所示:
表 fn:replace 函數
參數 |
描述 |
inputString |
源字符串。其類型必須爲String 類型 |
beforeSubstring |
指定被替換字符串。其類型必須爲String 類型 |
afterSubstring |
指定替換字符串。其類型必須爲String 類型 |
返回結果 |
返回一個String 類型的值 |
下面看一個示例。
$ {fn:replace("ABC","A","B")}<br>
將「ABC」 字符串替換爲「BBC」 ,在「ABC」 字符串中用「B」 替換了「A」 。
10. 分隔符轉換數組函數fn:split 函數
fn:split 函數用於將一組由分隔符分隔的字符串轉換成字符串數組。它的參數、返回結果和描述如表所示:
表 fn:split 函數
參數 |
描述 |
string |
源字符串。其類型必須爲String 類型 |
delimiters |
指定分隔符。其類型必須爲String 類型 |
返回結果 |
返回一個String[] 類型的值 |
下面看一個示例。
$ {fn:split("A,B,C",",")}<br>
將「A,B,C」 字符串轉換爲數組{A,B,C} 。
11. 字符串截取函數fn:substring 函數
fn:substring 函數用於截取字符串。它的參數、返回結果和描述如表所示:
表 fn:substring 函數
參數 |
描述 |
string |
源字符串。其類型必須爲String 類型 |
beginIndex |
指定起始下標(值從0 開始)。其類型必須爲int 類型 |
endIndex |
指定結束下標(值從0 開始)。其類型必須爲int 類型 |
返回結果 |
返回一個String 類型的值 |
下面看一個示例。
$ {fn:substring("ABC","1","2")}<br>
截取結果爲「B」 。
12.起始到定位截取字符串函數 fn:substringBefore 函數
fn:substringBefore 函數容許截取源字符從開始到某個字符串。它的參數和 fn:substringAfter 函數相同,不一樣的是 substring表示的是結束字符串。下面看一個示例。
$ {fn:substringBefore("ABCD","BC")}<br>
截取的結果爲「 A 」。
13.小寫轉換函數 fn:toLowerCase 函數
fn:toLowerCase 函數容許將源字符串中的字符所有轉換成小寫字符。它只有一個表示源字符串的參數 string ,函數返回一個 String 類型的值。下面看一個示例。
$ {fn:toLowerCase("ABCD")}<br>
轉換的結果爲「 abcd 」。
14.大寫轉換函數 fn:toUpperCase 函數
fn:toUpperCase 函數容許將源字符串中的字符所有轉換成大寫字符。它與 fn:toLowerCase 函數相同,也只有一個 String 參數,並返回一個 String 類型的值。下面看一個示例。
$ {fn:toUpperCase("abcd")}<br>
轉換的結果爲「 ABCD 」。
15.空格刪除函數 fn:trim 函數
fn:trim 函數將刪除源字符串中結尾部分的「空格」以產生一個新的字符串。它與 fn:toLowerCase 函數相同,只有一個 String參數,並返回一個 String 類型的值。下面看一個示例。
$ {fn:trim("AB C ")}D<br>
轉換的結果爲「 AB CD 」,注意,它將只刪除詞尾的空格而不是所有,所以「 B 」和「 C 」之間仍然留有一個空格。
示例
Java代碼
<%@ page contentType="text/html;charset=gbk"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<html>
<head>
<title>這個是 JSTL的 測試</title>
</head>
<body>
<c:set var="str" value="stringStRiNg"/>
<c:set var="t" value="tr"/>
<c:out value="${str} = ${fn:length(str)}"/>
<c:out value="${fn:toLowerCase(str)}"/>
<c:out value="${fn:toUpperCase(' ')}"/>
<c:out value="${fn:toUpperCase('AbCdEfg')}"/><br>
<c:out value="${fn:substring('asdfefg',0,3)}"/><br>
<c:out value="${fn:substringAfter('asdf','s')}"/><Br>
<c:out value="${fn:substringBefore(str,'g')}"/><Br>
<c:out value="${fn:trim(' sd dew e ')}"/><Br>
<c:out value=" d sd dew e "/><Br>
<c:out value="${fn:replace(str,'ing','IN')}"/><Br>
</body>
</html>
與forEach 綁定使用
Java代碼
<c:set var="naturesList" value="${fn:split('幽默,樂觀,外向,內向',',')}"/>
<c:forEach var="nature" items="${naturesList}" varStatus="varStatus">
<span><form:checkbox path="natures" value="${nature}"/><label for="natures<c:out value="${varStatus.index+1}"/>"><c:out value="${nature}"/></label></span>
</c:forEach>
<span>
</span>
在el中嵌套el的使用
Java代碼
<c:set var="userList" value="${fn:split(userIds,',')}"/>
<c:forEach var="user" items="${userList}" varStatus="varStatus">
<c:out value="${user}"/>
</c:forEach>