Jsp 應用之自訂標籤庫(taglib)及配置

來源:互聯網
上載者:User

前段時間看到關於taglib的一些應用,感覺很神秘,剛開始的時候還弄不明白taglib到底有什麼作用,在圖書館查了幾次資料,終於搞明白了,今天學習taglib的編寫及配置,現在寫出今天學習的總結。

taglib的主要作用就是:對一些需要重複利用的程式碼片段進行封裝,並設定該程式碼片段可能用到的屬性,提高代碼的利用率。taglib主要有三個部分構成: 實現程式碼片段的.java檔案; 標籤庫描述檔案.tld; web.xml的配置。

下面首先介紹標籤實現檔案,這裡以DecorTag.java實現的標籤為例:

//DecorTag.java

/*
 * DecorTag.java
 *
 * Created on 2007年3月17日, 上午8:25
 */

package com.wlmzfx.servlet;

import javax.servlet.jsp.*;//jsp類
import javax.servlet.jsp.tagext.*;//標籤類庫
import java.io.IOException;

//這裡實現一個用html表格顯示一個裝飾框

public class DecorTag extends TagSupport{

    //這些欄位用來控制外觀
    String align;//對齊
    String title;//標題
    String titleColor;//標題前景色彩
    String titleAlign;//標題對齊
    String color;//方框背景色
    String borderColor;//邊框顏色
    String margin;//邊框與內容之間的像素
    String borderWidth;//邊框寬度的像素值
    //以下方法用來設定各種屬性值,是必不可少的,在jsp頁面使用標籤時,屬性將轉化為方法調用
    public void setAlign(String value){
        this.align = value;
    }
   
    public void setTitle(String value){
        this.title = value;
    }
   
    public void setTitleColor(String value){
        this.titleColor = value;
    }
   
    public void setTitleAlign(String value){
        this.titleAlign = value;
    }
   
    public void setColor(String value){
        this.color = value;
    }
   
    public void setBorderColor(String value) {
        this.borderColor = value;
    }
   
    public void setMargin(String value){
        this.margin = value;
    }
   
    public void setBorderWidth(String value){
        this.borderWidth = value;
    }
   
   
    public void setPageContext(PageContext context){

        //以超類儲存頁面環境對象,下面的Tag()要用到,這很重要
        super.setPageContext(context);
        //設定屬性的預設值
        align = “cente”;
        title = null;
        titleColor = “White”;
        titleAlign = “left”;
        color = “lightblue”;
        borderColor = “black”;
        margin = “20″;
        borderWidth = “4″;
    }
   

    /**
      *此方法再遇到<decor:box>標籤時調用
   **/
    public int doStartTag() throws JspException{
        try{
            //從PageContext對象擷取輸出資料流並傳給setPageContext()方法
            JspWriter out = pageContext.getOut();
           
            out.print(”<div align=’”+align+”‘>”+”<table bgcolor=’”+borderColor+”‘”+”<border=’0′ cellspacing=’0′”+”cellpadding=’”+borderWidth+”‘”);
           
            if(title != null)
                out.print(”<tr><td align=’”+titleAlign+”‘>”+”<font face=’helvetica’ size=’+1′ “+”color=’”+titleColor+”‘><br>”+title+”</b></font></td><td>”);
           
            out.print(”<tr><td<table bgcolor=’”+color+”‘”+”border=’0′ cellspacing=’0′”+”cellpadding=’”+margin+”‘><tr><td>”);
        }catch(IOException e){
            throw new JspException(e.getMessage());
        }
        //傳回值告訴Jsp類處理標籤主題
        return EVAL_BODY_INCLUDE;
    }
    //在遇到</decor:box>結束標籤時調用
    public int doEndTag()throws JspException{
        try{
            JspWriter out = pageContext.getOut();
            out.println(”</td></tr></table><td><tr><table></div>”);
        }catch(IOException e){
            throw new JspException(e.getMessage());
        }
        //傳回值指示繼續處理Jsp頁面
        return EVAL_PAGE;
    }
   
}

//decor_1_0.tld(放在WEB-INF/tids/decor_1_0.tld
//一般以尾碼_1_0來表示tld檔案的版本,實際上這也是個xml檔案

<?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><!–檔案版本–>
    <short-name>decor</short-name><!–庫名–>
    <uri>http://www.wlmzfx.com/tlds/decor_1_0.tld</uri><!–唯一識別碼–>
    <tag><!–首先定義了標籤庫的一個標籤–>
        <name>box</name><!–首先定義標籤名,實作類別–>
        <tagclass>com.wlmzfx.servlet.DecorTag</tagclass>
        <!–定義標籤庫的每一個屬性–>
        <attribute>
            <name>align</name><!–屬性–>
            <required>false</required><!–不是必須–>
            <rtexprvalue>true</rtexprvalue><!–應有<%= %>值–>
        </attribute>
        <attribute>
            <name>color</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>bordercolor</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>margin</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>borderWidth</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>title</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>titleColor</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>titleAlign</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>    
    </tag>
    <!– A validator verifies that the tags are used correctly at JSP
         translation time. Validator entries look like this:
      <validator>
          <validator-class>com.mycompany.TagLibValidator</validator-class>
          <init-param>
             <param-name>parameter</param-name>
             <param-value>value</param-value>
   </init-param>
      </validator>
   –>
    <!– A tag library can register Servlet Context event listeners in
        case it needs to react to such events. Listener entries look
        like this:
     <listener>
         <listener-class>com.mycompany.TagLibListener</listener-class>
     </listener>
    –>
</taglib>

然後需要在web.xml中配置該標籤,在web.xml中添加下面的內容:

    <taglib>
        <!–看到標籤庫唯一識別碼時–>
        <taglib-uri>http://www.wlmzfx.com/tlds/decor_1_0.tld</taglib-uri>
         <!–使用標籤庫描述檔案的本機複本–>
        <taglib-location>tlds/decor_1_0.tld</taglib-location>
    </taglib>

下面以一個例子來說明該標籤庫的用法:

          在任何jsp頁面中加入下面的代碼:
          <!–這裡僅僅定義了title,color,margin屬性–>
          <decor:box title=”LogOut when Done” color=”red” margin=”100″>
          <!–這裡添加表格的內容,這裡可以繼續使用<decor:box>標籤,但是同樣必須以</decor:box>結束–>
          內容在這裡
         </decor:box>  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.