Java自定義標簽用法實例分析
本文實例講述了Java自定義標簽用法。分享給大家供大家參考,具體如下:
簡單例子
實現(xiàn)一個標簽分為兩步:(1)繼承SimpleTagSupport或TagSupport實現(xiàn)一個控制器(2)創(chuàng)建一個描述標簽的tld文件。下面是一個簡單例子:
(1)實現(xiàn)一個標簽控制器,向頁面輸出“hello”:
public class Test extends SimpleTagSupport{ public void doTag() throws IOException{ JspWriter out = getJspContext().getOut(); out.write("hello"); } }
(2)在WEB-INF文件夾下創(chuàng)建一個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>
上面代碼通過<tag>標簽描述一個自定義標簽,<body-content>empty</body-content>表示這個標簽沒有標簽體,也就是開始標簽和結束標簽之間沒有內容。
接下就可以在jsp文件中使用這個標簽了(記得使用<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>指令導入標簽庫):
<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %> <!DOCTYPE html> <html> <head> <title>標簽</title> </head> <body> <p>沒有標簽體,直接輸出內容的標簽</p> <my:Hello/> </body> </html>
繼承SimpleTagSupport定義簡單標簽
繼承SimpleTagSupport,然后實現(xiàn)doTag()方法就可以自定義一個標簽。這里有份英文教程,對繼承SimpleTagSupport方式講得非常透徹淺顯易懂,本站下載鏈接。
下面是一些例子:
定義標簽屬性
(1)首先在控制器里填加一個屬性,并生成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文件里添加這個屬性的描述,用<attribute>標簽:
<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>標簽有多個子標簽可以用來定義該屬性的限制:
名稱 | 用處 |
---|---|
name | 定義屬性名 |
required | 定義該屬性是否是必須的,默認是false |
rtexprvalue | 定義是否允許使用一個運行時表達式的值作為該屬性的值,默認為false。比如要支持EL表達式,這個屬性應該置為true |
type | 定義屬性的值類型,默認是String |
fragment | 聲明這個變量是否應該被看做JspFragment. |
定義標簽體
之前定義的標簽標簽體一直都是空的,如果要支持標簽體:
(1)修改tld文件的<body-content>值為scriptless,表示有標簽體,并且標簽體不含腳本(指jsp腳本,EL表達式等)
<!-- 獲取標簽體,輸出 --> <tag> <name>Hello</name> <tag-class>com.huanle.utils.tags.Test</tag-class> <body-content>scriptless</body-content> </tag>
(2)在標簽控制器中獲得標簽體并輸出:
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)); } }
使用時就可以包含標簽體了:
<my:Hello>hello</my:Hello>
繼承TagSupport實現(xiàn)更復雜的標簽
(后面更新。。。)
在標簽內部使用request
標簽屬于其實最終會轉化成一個Servlet,所有Servlet能做的標簽都能做,包括操作request,session等,其中關鍵就在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); ... } }
更多關于java相關內容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java字符與字符串操作技巧總結》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
springboot自動重連Redis的實現(xiàn)方法
由于網(wǎng)絡或服務器問題,Redis連接可能會斷開,導致應用程序無法繼續(xù)正常工作,本文主要介紹了springboot自動重連Redis的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下2024-02-02MyBatis-Plus邏輯刪除和字段自動填充的實現(xiàn)
本文主要介紹了MyBatis-Plus邏輯刪除和字段自動填充的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08自定義@RequestBody注解如何獲取JSON數(shù)據(jù)
這篇文章主要介紹了自定義@RequestBody注解如何獲取JSON數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04