首頁技術文章正文

JAVA培訓之自定義EL函數(shù)庫

更新時間:2017-04-16 來源:黑馬程序員Java培訓學院 瀏覽量:

EL函數(shù)庫中,我們學習的那些方法都是由JSTL提供的,我們自己也可以定義函數(shù)庫。自定義EL函數(shù)庫有以下三個步驟:
  • 寫一個類,在該類中定義一個有返回值的靜態(tài)方法;
  • 編寫tld文件;
  • 在頁面中添加taglib指令,導入自定義標簽庫。
下面根據(jù)以上步驟,我們來完成自定義EL函數(shù)庫,點擊此處 1554260397032_1492336640063055268.png下載案例源代碼,具體如下所示:
(1)新建一個web應用Example9,在src目錄下新建一個類,MyFunciton,主要代碼如例1-1所示:
例1-1 MyFunction.java
package cn.itcast.fn;
public class MyFunction {
    public static String print(){
        return "創(chuàng)智播客之EL函數(shù)庫";
    }
}
例1-1中,MyFunction中的print()方法必須是靜態(tài)的,有返回值的。
(2)因為tld文件我們不希望別人能夠直接訪問,因此我們將tld文件放在WEB-INF目錄下。在該目錄下創(chuàng)建一個目錄tlds,然后將itcast.tld文件放在tlds目錄中,文件內(nèi)容如例1-2所示:
例1-2 itcast.tld
<?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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
  <description>itcast</description>
  <display-name>itcast-function</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>it</short-name>
  <uri>http://www.itcast.cn/el/functions</uri>
 
  <function>
    <name>print</name>
    <function-class>cn.itcast.fn.MyFunction</function-class>
    <function-signature>java.lang.String print()</function-signature>
  </function>
</taglib>
例1-2中,文件的頭與約束都是從jstl函數(shù)庫中的fn.tld文件中拷貝過來的,下面對文件中的比較重要的標簽進行解析,如下所示:
  • <tlib-version>:當前函數(shù)庫的版本號;
  • <short-name>:函數(shù)庫的前綴,例如fn;
  • <uri>:代表當前函數(shù)庫的地址,在本案例中該標簽不起作用;
  • <function>:定義函數(shù)的一個標簽;
  • <name>:指明函數(shù)的名稱;
  • <function-class>:指明函數(shù)所在的類的名稱;
  • <function-signature>:指明函數(shù)的名字及返回值類型,如果有參數(shù),也包括參數(shù)類型,如:<function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>。
另外在tld文件中,還存在一個標簽,如下:
<function>
    <description>
      Tests if an input string contains the specified substring.
    </description>
    <name>contains</name>
    <function-class>org.apache.taglibs.standard.functions.Functions</function-class>
    <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>
    <example>
      &lt;c:if test="${fn:contains(name, searchString)}">
    </example>
  </function>
其中<example>標簽表示的是該函數(shù)在jsp頁面中的示范。
(3)在Example9的WebRoot目錄下新建一個fn目錄,然后在該目錄下新建一個fn.jsp頁面,主要代碼如例1-3所示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h1>${it:print() }</h1>
</body>
</html>
例1-3中,taglib指令中的uri屬性的值為“/WEB-INF/tlds/itcast.tld”,該值正是itcast.tld文件的位置。
(4)將Example9發(fā)布到服務器,然后啟動服務器,在瀏覽器端訪問:http://localhost:8080/Example9/fn/fn.jsp,瀏覽器顯示的結(jié)果如圖1-1所示:
1554260402641_1492336640094003686.png圖1-1 瀏覽器顯示結(jié)果


本文版權歸黑馬程序員Java培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!

作者:黑馬程序員Java培訓學院

首發(fā):http://www.pantone-color.com.cn/special/hmjavaeezly/


分享到:
在線咨詢 我要報名
和我們在線交談!