Tag究竟是什么?如何實現一個Tag? 一個tag就是一個普通的java類,它惟一特別之處是它必須繼承TagSupport或者BodyTagSupport類。這兩個類提供了一些方法,負責jsp頁面和你編寫的類之間的交互,例如輸入,輸出。而這兩個類是由jsp容器提供的,無須開發人員自己實現。換句話說,你只需把實現了業務邏輯的類繼承TagSupport或者BodyTagSupport,再做一些特別的工作,你的類就是一個Tag。并且它自己負責和jsp頁面的交互,不用你多操心。 “特別的工作”通常有以下幾個步驟: 1)提供屬性的set方法,此后這個屬性就可以在jsp頁面設置。以jstl標簽為例 c:out value=""/,這個value就是jsp數據到tag之間的入口。所以tag里面必須有一個setValue方法,具體的屬性可以不叫value。例如setValue(String data){this.data = data;} 這個“value”的名稱是在tld里定義的。取什么名字都可以,只需tag里提供相應的set方法即可。 2)處理 doStartTag 或 doEndTag 。這兩個方法是 TagSupport提供的。 還是以c:out value=""/為例,當jsp解析這個標簽的時候,在“<”處觸發 doStartTag 事件,在“>”時觸發 doEndTag 事件。通常在 doStartTag 里進行邏輯操作,在 doEndTag 里控制輸出。3)編寫tld文件。4)在jsp頁面導入tld。這樣,你的jsp頁面就可以使用自己的tag了。 通常你會發現自己絕大多數活動都集中在 doStartTag 或 doEndTag 方法里。確實如此,熟悉一些接口和類之后,寫taglib很容易。正如《jsp設計》的作者所言:里面的邏輯稍微有點復雜,但畢竟沒有火箭上天那么難。 一個簡單的例子:OutputTagpackage diegoyun;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;/** * @author chenys */public class OutputTag extends TagSupport{ |
新聞熱點
疑難解答