您好,登錄后才能下訂單哦!
這篇文章主要講解了“JSP怎么自定義標(biāo)簽”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“JSP怎么自定義標(biāo)簽”吧!
接下來(lái),我們想創(chuàng)建一個(gè)自定義標(biāo)簽叫作,標(biāo)簽格式為:
要?jiǎng)?chuàng)建自定義的JSP標(biāo)簽,你首先必須創(chuàng)建處理標(biāo)簽的Java類。所以,讓我們創(chuàng)建一個(gè)HelloTag類,如下所示:
package com.runoob; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
以下代碼重寫了doTag()方法,方法中使用了getJspContext()方法來(lái)獲取當(dāng)前的JspContext對(duì)象,并將”Hello Custom Tag!”傳遞給JspWriter對(duì)象。
編譯以上類,并將其復(fù)制到環(huán)境變量CLASSPATH目錄中。最后創(chuàng)建如下標(biāo)簽庫(kù):webapps\ROOT\WEB-INF\custom.tld。
1.0 2.0 Example TLD Hello com.runoob.HelloTag empty
接下來(lái),我們就可以在JSP文件中使用Hello標(biāo)簽:
"ex" uri="WEB-INF/custom.tld"%> A sample custom tag
以上程序輸出結(jié)果為:
Hello Custom Tag!
你可以像標(biāo)準(zhǔn)標(biāo)簽庫(kù)一樣在標(biāo)簽中包含消息內(nèi)容。如我們要在我們自定義的Hello中包含內(nèi)容,格式如下:
This is message body
我們可以修改標(biāo)簽處理類文件,代碼如下:
package com.runoob; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } }
接下來(lái)我們需要修改TLD文件,如下所示:
1.0 2.0 Example TLD with Body Hello com.runoob.HelloTag scriptless
現(xiàn)在我們可以在JSP使用修改后的標(biāo)簽,如下所示:
"ex" uri="WEB-INF/custom.tld"%> A sample custom tag This is message body
以上程序輸出結(jié)果如下所示:
This is message body
你可以在自定義標(biāo)準(zhǔn)中設(shè)置各種屬性,要接收屬性,值自定義標(biāo)簽類必須實(shí)現(xiàn)setter方法, JavaBean 中的setter方法如下所示:
package com.runoob; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* 從屬性中使用消息 */ JspWriter out = getJspContext().getOut(); out.println( message ); } else { /* 從內(nèi)容體中使用消息 */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } }
屬性的名稱是”message”,所以setter方法是的setMessage()?,F(xiàn)在讓我們?cè)赥LD文件中使用的元素添加此屬性:
1.0 2.0 Example TLD with Body Hello com.runoob.HelloTag scriptless message
現(xiàn)在我們就可以在JSP文件中使用message屬性了,如下所示:
"ex" uri="WEB-INF/custom.tld"%> A sample custom tag "This is custom tag" />
以上實(shí)例數(shù)據(jù)輸出結(jié)果為:
This is custom tag
你還可以包含以下屬性:
屬性 | 描述 |
---|---|
name | 定義屬性的名稱。每個(gè)標(biāo)簽的是屬性名稱必須是唯一的。 |
required | 指定屬性是否是必須的或者可選的,如果設(shè)置為false為可選。 |
rtexprvalue | 聲明在運(yùn)行表達(dá)式時(shí),標(biāo)簽屬性是否有效。 |
type | 定義該屬性的Java類類型 。默認(rèn)指定為 String |
description | 描述信息 |
fragment | 如果聲明了該屬性,屬性值將被視為一個(gè) JspFragment。 |
以下是指定相關(guān)的屬性實(shí)例:
..... attribute_name false type>java.util.Datetype> false .....
如果你使用了兩個(gè)屬性,修改TLD文件,如下所示:
..... attribute_name1 false type>java.util.Booleantype> false attribute_name2 true type>java.util.Datetype> .....
感謝各位的閱讀,以上就是“JSP怎么自定義標(biāo)簽”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)JSP怎么自定義標(biāo)簽這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。