1. 程式人生 > >IT兄弟連 JavaWeb教程 使用JSTL函數

IT兄弟連 JavaWeb教程 使用JSTL函數

包括 靜態 als get 例如 eal req rac ava

在JSTL Functions標簽庫中提供了一組常用的EL函數,主要用於處理字符串,在JSP中可以直接使用這些函數。

在JSP中使用Functions標簽庫,需要通過taglib指令引入該標簽庫:

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

使用JSTL函數

1.fn:contains函數

fn:contains函數用於判斷在源字符串中是否包含目標字符串,其語法為:

fn:contains(String source,String target)

以上source參數指定源字符串,target參數指定目標字符串,返回類型為boolean。例如對於以下EL表達式:

${fn:contains("Tomcat,"cat"}}

${fn:contains("Tomcat","CAT")}

第一個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>,空格符為"&nbsp;",最後返回新替換後的字符串。StringDeal類的完成代碼如下:

package com.xdl.el;

public class StringDeal{

public static String shiftEnter(String str){

String newStr = str.replaceAll("\r\n","<br>");

newStr = newStr.replaceAll(" ","&nbsp;");

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。

● 由於在標簽庫的描述文件中輸入了錯誤的標記名產生的異常信息。

● 由於定義的方法不是靜態方法所產生的異常。

IT兄弟連 JavaWeb教程 使用JSTL函數