1. 程式人生 > >JSP編程專題2之JSP核心三(自定義EL函數和標簽)

JSP編程專題2之JSP核心三(自定義EL函數和標簽)

自定義el函數 jstl中的el函數 自定義el標簽 自定義帶屬性的el標簽 自定義el遍歷標簽

1、自定義EL函數:

a、自定義類,類中的方法使用static修飾符修飾:

技術分享


b、該類以及函數,需要在一個擴展名為.tld(tld,tag library definition,標簽庫定義)的XML文件中進行註冊。

- 需要註意的是,XML文件是需要約束的,即需要配置文件頭部。這個頭部約束可以從以下文件中進行復制:在Tomcat安裝目錄下:tomcat-7.0\webapps\example\WEB-INF\jsp2中。

技術分享


- 在項目的WEB-INF目錄下新建一個XML文件(名字可以自定義),添加和修改的內容如下:

技術分享


c、在使用到這個EL函數的JSP文件中,需要添加taglib標簽,如下所示:(添加的taglib標簽和使用方式)

技術分享

- 在瀏覽器顯示的頁面中呈現的是大寫的“ABC”。

- 需要註意的是,EL函數只能夠處理四大域中的屬性值以及String常量:

技術分享


2、JSTL中的EL函數:

a、JSTL:Apache已經定義好了一套標準的標簽庫規範,稱之為JSTL,JSP Standard Tag Library,即JSP標準標簽庫,該規範已經通過JCP審核認定。

- 在JSTL中,已經定義好了一套對於字符串進行處理的函數標簽庫,這個函數標簽庫中定義了16個對於字符串進行處理的函數。我們可以在JSP頁面中直接使用。

- 當然,需要使用JSTL,首先需要將其jar包導入。(jar包下載地址為:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/)

技術分享


b、JSTL的EL函數標簽庫:

- JSTL函數標簽庫的.tld文件存放於standard的jar包的META-INF目錄中,文件名為fn.tld。

技術分享


c、JSTL的函數標簽庫中定義的16個EL函數如下表所示:

技術分享

技術分享


3、自定義EL標簽:

a、自定義類,該類繼承SimpleTagSupport類,重寫doTag方法:

技術分享

- javax.servlet.jsp.tagext.SimpleTagSupport類:實現自SimpleTag接口的用於定義標簽處理器的基類。

技術分享

- 該類的doTag()方法默認不對標簽不做任何處理:

技術分享

- javax.servlet.jsp.tagext.JspFragment的invoke(Writer out)方法:執行這個Jsp片段並將數據寫入給定的字符輸出流中:(如果傳入的參數是null,則與這個片段相關的JspContext對象的getOut方法將會配調用,並返回JspWriter類對象作為參數傳入給invoke(Writer out)方法)

技術分享


b、在項目的WEB-INF目錄下新建一個XML文件(名字可以自定義),添加和修改的內容如下:

技術分享


c、在使用到這個EL標簽的JSP文件中,需要添加taglib標簽,如下所示:(添加的taglib標簽和使用方式)

技術分享


4、自定義帶屬性的標簽:

a、自定義類,該類繼承SimpleTagSupport類,重寫doTag方法:(在自定義類中編寫私有化的成員變量(並提供set方法),等同於在標簽處理器中設置屬性)

技術分享


b、在項目的WEB-INF目錄下新建一個XML文件(名字可以自定義),添加和修改的內容如下:

技術分享


c、在使用到這個EL標簽的JSP文件中,需要添加taglib標簽,如下所示:(添加的taglib標簽和使用方式)

技術分享


5、自定義遍歷List的forEachList標簽:

a、自定義類,該類繼承SimpleTagSupport類,重寫doTag方法:

技術分享


b、在項目的WEB-INF目錄下新建一個XML文件(名字可以自定義),添加和修改的內容如下:

技術分享

c、在使用到這個EL標簽的JSP文件中,需要添加taglib標簽,如下所示:(添加的taglib標簽和使用方式)

技術分享


6、自定義遍歷自定義遍歷集合與數組(包括基本類型數組)的forEach標簽:

a、自定義類,該類繼承SimpleTagSupport類,重寫doTag方法:

技術分享

- java.lang.reflect.Array類:這個類提供靜態方法,用以動態創建和訪問java數組對象。

技術分享


- java.util.Map接口中的entrySet方法:用於返回包含當前Map鍵值對的Set視圖:(即以“鍵=值”的形式存儲,即Map.Entry<K,V>)

技術分享


b、在項目的WEB-INF目錄下新建一個XML文件(名字可以自定義),添加和修改的內容如下:

技術分享


c、在使用到這個EL標簽的JSP文件中,需要添加taglib標簽,如下所示:(添加的taglib標簽和使用方式)

技術分享

技術分享



- 顯示在index.jsp中的數據為:

技術分享

- 附加說明:EL總結

- EL不能夠出現在Java代碼塊、表達式塊等JSP的動態代碼部分。

- EL只能從pageContext、request、session和application四大域屬性空間中獲取數據。

- EL不能拋出空指針異常。若訪問一個null對象的屬性,則什麽也不顯示。

- EL不會拋出數組訪問越界異常。若訪問一個數組中的不存在的元素,則什麽也不顯示。

- EL不具有對字符串進行處理的能力,就連簡單的字符串拼接都不行。









本文出自 “12392717” 博客,請務必保留此出處http://12402717.blog.51cto.com/12392717/1975416

JSP編程專題2之JSP核心三(自定義EL函數和標簽)