Java自定義標(biāo)簽用法實(shí)例分析
本文實(shí)例講述了Java自定義標(biāo)簽用法。分享給大家供大家參考,具體如下:
簡(jiǎn)單例子
實(shí)現(xiàn)一個(gè)標(biāo)簽分為兩步:(1)繼承SimpleTagSupport或TagSupport實(shí)現(xiàn)一個(gè)控制器(2)創(chuàng)建一個(gè)描述標(biāo)簽的tld文件。下面是一個(gè)簡(jiǎn)單例子:
(1)實(shí)現(xiàn)一個(gè)標(biāo)簽控制器,向頁(yè)面輸出“hello”:
public class Test extends SimpleTagSupport{ public void doTag() throws IOException{ JspWriter out = getJspContext().getOut(); out.write("hello"); } }
(2)在WEB-INF文件夾下創(chuàng)建一個(gè)custom.tld文件:
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" 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"> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>my</short-name> <!-- 直接顯示hello --> <tag> <name>Hello</name> <tag-class>com.huanle.utils.tags.Test</tag-class> <body-content>empty</body-content> </tag> </taglib>
上面代碼通過(guò)<tag>標(biāo)簽描述一個(gè)自定義標(biāo)簽,<body-content>empty</body-content>表示這個(gè)標(biāo)簽沒(méi)有標(biāo)簽體,也就是開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽之間沒(méi)有內(nèi)容。
接下就可以在jsp文件中使用這個(gè)標(biāo)簽了(記得使用<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>指令導(dǎo)入標(biāo)簽庫(kù)):
<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %> <!DOCTYPE html> <html> <head> <title>標(biāo)簽</title> </head> <body> <p>沒(méi)有標(biāo)簽體,直接輸出內(nèi)容的標(biāo)簽</p> <my:Hello/> </body> </html>
繼承SimpleTagSupport定義簡(jiǎn)單標(biāo)簽
繼承SimpleTagSupport,然后實(shí)現(xiàn)doTag()方法就可以自定義一個(gè)標(biāo)簽。這里有份英文教程,對(duì)繼承SimpleTagSupport方式講得非常透徹淺顯易懂,本站下載鏈接。
下面是一些例子:
定義標(biāo)簽屬性
(1)首先在控制器里填加一個(gè)屬性,并生成setter 方法
public class Test extends SimpleTagSupport{ private String name; public void doTag() throws IOException{ JspWriter out= getJspContext().getOut(); out.write("hello"); } public void setName(String name) { this.name = name; } }
(2)在tld文件里添加這個(gè)屬性的描述,用<attribute>標(biāo)簽:
<tag> <name>Hello</name> <tag-class>com.huanle.utils.tags.Test</tag-class> <body-content>empty</body-content> <attribute> <name>name</name> </attribute> </tag>
<attribute>標(biāo)簽有多個(gè)子標(biāo)簽可以用來(lái)定義該屬性的限制:
名稱 | 用處 |
---|---|
name | 定義屬性名 |
required | 定義該屬性是否是必須的,默認(rèn)是false |
rtexprvalue | 定義是否允許使用一個(gè)運(yùn)行時(shí)表達(dá)式的值作為該屬性的值,默認(rèn)為false。比如要支持EL表達(dá)式,這個(gè)屬性應(yīng)該置為true |
type | 定義屬性的值類型,默認(rèn)是String |
fragment | 聲明這個(gè)變量是否應(yīng)該被看做JspFragment. |
定義標(biāo)簽體
之前定義的標(biāo)簽標(biāo)簽體一直都是空的,如果要支持標(biāo)簽體:
(1)修改tld文件的<body-content>值為scriptless,表示有標(biāo)簽體,并且標(biāo)簽體不含腳本(指jsp腳本,EL表達(dá)式等)
<!-- 獲取標(biāo)簽體,輸出 --> <tag> <name>Hello</name> <tag-class>com.huanle.utils.tags.Test</tag-class> <body-content>scriptless</body-content> </tag>
(2)在標(biāo)簽控制器中獲得標(biāo)簽體并輸出:
public class Test extends SimpleTagSupport { private StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException{ getJspBody().invoke(sw); getJspContext().getOut().write(sw.toString().trim().substring(0, length)); } }
使用時(shí)就可以包含標(biāo)簽體了:
<my:Hello>hello</my:Hello>
繼承TagSupport實(shí)現(xiàn)更復(fù)雜的標(biāo)簽
(后面更新。。。)
在標(biāo)簽內(nèi)部使用request
標(biāo)簽屬于其實(shí)最終會(huì)轉(zhuǎn)化成一個(gè)Servlet,所有Servlet能做的標(biāo)簽都能做,包括操作request,session等,其中關(guān)鍵就在getJspContext()
方法上。代碼如下:
public class DispalyErrorMessageTag extends SimpleTagSupport { public void doTag() throws IOException{ JspWriter out = getJspContext().getOut(); PageContext pageContext = (PageContext)getJspContext(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String value = request.getParameter(param); ... } }
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- JavaWeb開(kāi)發(fā)之JSTL標(biāo)簽庫(kù)的使用、 自定義EL函數(shù)、自定義標(biāo)簽(帶屬性的、帶標(biāo)簽體的)
- javaWeb自定義標(biāo)簽用法實(shí)例詳解
- JSP自定義標(biāo)簽-標(biāo)簽屬性_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java開(kāi)發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽
- Java自定義簡(jiǎn)單標(biāo)簽實(shí)例
- java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡(jiǎn)介
- java實(shí)現(xiàn)利用String類的簡(jiǎn)單方法讀取xml文件中某個(gè)標(biāo)簽中的內(nèi)容
- Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽實(shí)例
- java使用正則表達(dá)式過(guò)濾html標(biāo)簽
相關(guān)文章
springboot自動(dòng)重連Redis的實(shí)現(xiàn)方法
由于網(wǎng)絡(luò)或服務(wù)器問(wèn)題,Redis連接可能會(huì)斷開(kāi),導(dǎo)致應(yīng)用程序無(wú)法繼續(xù)正常工作,本文主要介紹了springboot自動(dòng)重連Redis的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02關(guān)于Java中properties文件編碼問(wèn)題
這篇文章主要介紹了關(guān)于Java中properties文件編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11MyBatis-Plus邏輯刪除和字段自動(dòng)填充的實(shí)現(xiàn)
本文主要介紹了MyBatis-Plus邏輯刪除和字段自動(dòng)填充的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08自定義@RequestBody注解如何獲取JSON數(shù)據(jù)
這篇文章主要介紹了自定義@RequestBody注解如何獲取JSON數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Java 獲取本機(jī)的IP與MAC地址實(shí)現(xiàn)詳解
這篇文章主要介紹了Java 獲取本機(jī)的IP與MAC地址實(shí)現(xiàn)詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09