一般我們說自定義標(biāo)簽是指JSP自定義標(biāo)簽。自定義標(biāo)簽在功能上和邏輯上與javaBean 類似,都封裝Java 代碼。自定義標(biāo)簽是可重用的組件代碼,并且允許開發(fā)人員為復(fù)雜的操作提供邏輯名稱。我們在之前的課程中講解過
自定義EL函數(shù)庫,今天的自定義標(biāo)簽跟它有些類似。
我們自定義的標(biāo)簽是動作標(biāo)簽,可以理解為每個標(biāo)簽就是一個對象,有對象就必然有對應(yīng)的類,那么標(biāo)簽的功能就在對應(yīng)類的某個方法中實現(xiàn)。下面我們來學(xué)習(xí)自定義標(biāo)簽的步驟,具體如下:
l 定義一個標(biāo)簽處理類;
l 創(chuàng)建一個tld文件,該文件本身是一個xml文件;
l 在頁面中使用<%@taglib%>指令來指定tld文件的位置。
在JavaEE幫助文檔中定義了與標(biāo)簽相關(guān)的類,如圖1-1所示:
圖1-1 Tag接口
圖1-1中的Tag是經(jīng)典標(biāo)記處理程序的接口,定義了標(biāo)記處理程序與 JSP 頁面實現(xiàn)類之間的基本協(xié)議,也定義了生命周期以及在開始和結(jié)束標(biāo)記時調(diào)用的方法。但是相對于其他標(biāo)簽處理接口來說比較復(fù)雜,因此我們定義的標(biāo)簽處理類不會去實現(xiàn)Tag接口,而是去實現(xiàn)SimpleTag接口,該接口的父接口是JspTag,它和Tag是兄弟關(guān)系。如圖1-2所示:
圖1-2 SimpleTag接口
SimpleTag是用來定義簡單標(biāo)記處理程序的接口。簡單標(biāo)記處理程序不同于經(jīng)典標(biāo)記處理程序,因為它不支持 doStartTag() 和 doEndTag(),SimpleTag 接口提供了一個簡單 doTag() 方法,對于任何給定標(biāo)記調(diào)用,只能調(diào)用該方法一次。所有標(biāo)記邏輯、迭代、正文求值等等,都在這一個方法中執(zhí)行。因此,簡單標(biāo)記處理程序與 BodyTag 具有相等的效力,只是它具有更簡單的生命周期和接口。
下面我們來了解SimpleTag接口的方法,如下所示:
l void doTag():每次執(zhí)行標(biāo)簽時都會調(diào)用這個方法;
l JspTag getParent():返回當(dāng)前標(biāo)簽的父標(biāo)簽;
l void setParent(JspTag parent):設(shè)置父標(biāo)簽;
l void setJspBody(JspFragment jspBody):設(shè)置標(biāo)簽體;
l void setJspContext(JspContext pc):設(shè)置jsp上下文對象,其中JspContext類的子類是PageContext。
以上這五個方法中,setParent(JspTag parent)、setJspBody(JspFragment jspBody)、setJspContext(JspContext pc)方法是由Tomcat服務(wù)器調(diào)用,服務(wù)器在調(diào)用setJspContext(JspContext pc)方法時,會將頁面中的pageContext對象傳遞給該方法,那么我們就可以通過pageContext對象獲得其他內(nèi)置對象了。當(dāng)以上三個方法被調(diào)用后,doTag()方法才會被Tomcat服務(wù)器調(diào)用,而getParent()方法很少被調(diào)用,因為我們自定義的標(biāo)簽很少會有父標(biāo)簽。需要注意的是我們自定義的標(biāo)簽是動作標(biāo)簽,那么它的父標(biāo)簽也只能是動作標(biāo)簽,因此HTML標(biāo)簽不算是自定義標(biāo)簽的父標(biāo)簽。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee