溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JSP怎么自定義標(biāo)簽

發(fā)布時(shí)間:2022-01-29 11:44:07 來(lái)源:億速云 閱讀:294 作者:zzz 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“JSP怎么自定義標(biāo)簽”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“JSP怎么自定義標(biāo)簽”吧!

JSP怎么自定義標(biāo)簽

創(chuàng)建”Hello”標(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!

訪問(wèn)標(biāo)簽體

你可以像標(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)簽屬性

你可以在自定義標(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)注!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

jsp
AI