在JSTL Functions標籤庫中提供了一組經常使用的EL函數,主要用於處理字符串,在JSP中能夠直接使用這些函數。html
在JSP中使用Functions標籤庫,須要經過taglib指令引入該標籤庫:java
<%@ taglib prefix="fn" uri=http://java.sun.com/jsp/jstl/functions %>web
使用JSTL函數數組
1.fn:contains函數jsp
fn:contains函數用於判斷在源字符串中是否包含目標字符串,其語法爲:函數
fn:contains(String source,String target)post
以上source參數指定源字符串,target參數指定目標字符串,返回類型爲boolean。例如對於如下EL表達式:ui
${fn:contains("Tomcat,"cat"}}orm
${fn:contains("Tomcat","CAT")}xml
第一個EL表達式的值爲true,第二個EL表達式的值爲false。
2.fn:toUpperCase函數
fn:toUpperCase函數用於將源字符串中的全部字符改成大寫,其語法爲:
fn:toUpperCase(String source)
以上source參數指定原字符串,返回類型爲String。
例如對於如下EL表達式:
${fn:toUpperCase("TomCat")}
其輸出結果爲:
TOMCAT
3.fn:length函數
fn:length函數用於返回字符串中的字符的個數,或者集合和數組中的元素的個數,其語法爲:
fn:length(source)
以上source參數能夠爲字符串、集合或者數組,返回類型爲int。
2 實現自定義函數標籤
函數的定義和使用分爲如下3個步驟:
● 編寫一個Java類,並在該類中編寫公用的靜態方法,用於實現自定義EL函數的具體功能。
● 編寫標籤庫描述文件,對函數進行聲明。該文件的擴展名爲.tld,被保存到Web應用的WEB-INF文件夾下。
● 在JSP頁面中引用標籤庫,並調用定義的EL函數,實現相應的功能。
例:定義EL函數處理字符串中的回車換行符和空格符。
● 編寫一個Java類,名稱爲StringDeal,將其保存在com.xdl.el包中,在該類中添加一個公有的靜態方法shiftEnter(),在該方法中替換輸入字符串中的回車換行符爲<br>,空格符爲" ",最後返回新替換後的字符串。StringDeal類的完成代碼以下:
package com.xdl.el;
public class StringDeal{
public static String shiftEnter(String str){
String newStr = str.replaceAll("\r\n","<br>");
newStr = newStr.replaceAll(" "," ");
return newStr;
}
}
● 編寫標籤庫描述文件,名稱爲stringDeal.tld,並將其保存到WEB-INF文件夾下。關鍵代碼以下:
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/ /java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2. 0" >
<tlib-version>1.0</tlib-version>
<uri>/stringDeal</uri>
<function>
<name>shiftEnter</name>
<function-class>com.xdl.el.StringDeal</function-class>
<function-signature>java.lang.String shiftEnter(java.lang.Str ing)</function-signature>
</function>
</taglib>
參數說明:
uri標記:用於指定tld文件的映射路徑。在應用EL函數時,須要使用該標記指定的內容。
name標記:用於指定EL函數所對應的方法名,一般與java文件中的方法名相同。
function-class標記:用於指定EL函數所對應的Java文件,這裏須要包括包名和類名,例如,在上面的代碼中,報名爲com.xdl.el,類名爲StringDeal。
function-signature標記:用於指定EL函數所對應的靜態方法,這裏包括返回值的類型和入口參數的類型。在指定這些類型時,須要使用完整的類型名,例如,在上面的代碼中,不能指定該標記的內容爲"String.shiftEnter(String)"。
● 編寫index.jsp文件,在該文件中添加一個表單及表單元素,用於收集內容信息。關鍵代碼以下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>兄弟連IT教育</title>
</head>
<body>
<form name="form1" method="post" action="deal.jsp">
<textarea name="content" cols="30" rows="5"></textarea>
<br>
<input type="submit" name="Button" value="提交">
</form>
</body>
</html>
● 編寫表單的處理頁deal.jsp文件,在該文件中應用上面定義的EL函數,對獲取到的內容信息進行處理(主要是替換字符串中的回車換行符和空格符)後顯示到頁面中。deal.jsp文件的具體代碼以下:
<%@ page language="java" contentType="text/html;charset=UTF-8" pa geEncoding="UTF-8"%>
<%@ taglib uri="/stringDeal" prefix="xdlfn" %>
<%request.setCharacterEncoding("UTF-8"); %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8 ">
<title>顯示結果</title>
</head>
<body>
內容爲:<br>
${xdlfn:shiftEnter(param.content)}
</body>
</html>
運行本實例,在頁面中將顯示一個內容編輯框和一個提交按鈕,在內容編輯框中輸入內容,而後單擊提交按鈕,觀察新頁面的變化。
在定義和使用EL函數時,可能出現如下3種錯誤。
● 因爲沒有指定完整的類型名而產生的異常信息。
在編寫EL函數時,若是出現以下圖所示的異常信息,則是因爲在標籤庫描述文件中沒有指定完整的類型名而產生的。
解決的方法:在擴展名爲.tld的文件中指定完整的類型名便可。例如,在上面的這個一場中,就能夠將完整的類型名設置java.lang.String。
● 因爲在標籤庫的描述文件中輸入了錯誤的標記名產生的異常信息。
● 因爲定義的方法不是靜態方法所產生的異常。