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

在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>,空格符爲"&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>

運行本實例,在頁面中將顯示一個內容編輯框和一個提交按鈕,在內容編輯框中輸入內容,而後單擊提交按鈕,觀察新頁面的變化。

42b1d12ec07f402cb739673ced8b9c2c.png

 

在定義和使用EL函數時,可能出現如下3種錯誤。

●  因爲沒有指定完整的類型名而產生的異常信息。

在編寫EL函數時,若是出現以下圖所示的異常信息,則是因爲在標籤庫描述文件中沒有指定完整的類型名而產生的。

2f4cfae8164d457881dce93f9b2326c3.png

 

解決的方法:在擴展名爲.tld的文件中指定完整的類型名便可。例如,在上面的這個一場中,就能夠將完整的類型名設置java.lang.String。

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

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

相關文章
相關標籤/搜索