一個tag就是一個普通的java類,它惟一特別之處是它必須繼承TagSupport或者BodyTagSupport類。這兩個類提供了一些方法,負責jsp頁面和你編寫的類之間的交互,例如輸入,輸出。而這兩個類是由jsp容器提供的,無須開發(fā)人員自己實現(xiàn)。換句話說,你只需把實現(xiàn)了業(yè)務邏輯的類繼承TagSupport或者BodyTagSupport,再做一些特別的工作,你的類就是一個Tag。并且它自己負責和jsp 頁面的交互,不用你多操心。
“特別的工作”通常有以下幾個步驟:
[1]提供屬性的set方法,此后這個屬性就可以在jsp頁面設置。以jstl標簽為例 c:out value=""/,這個value就是jsp數(shù)據到tag之間的入口。所以tag里面必須有一個setValue方法,具體的屬性可以不叫value。例如setValue(String data){this.data = data;}
這個“value”的名稱是在tld里以attribute元素存在的。
取什么名字都可以,只需tag里提供相應的set方法即可。
[2]處理 doStartTag 或 doEndTag 。這兩個方法是 TagSupport提供的。 還是以c:out value=""/為例,當jsp解析這個標簽的時候,在“<”處觸發(fā) doStartTag 事件,在“>”時觸發(fā) doEndTag 事件。通常在 doStartTag 里進行初始化,流程選擇操作,在 doEndTag 里后續(xù)頁面輸出控制。
[3]編寫tld文件,就是把編寫的tag組件的信息以mxl形式告訴容器,它才好以一定步驟解釋tag組件
[4]在jsp頁面導入tld。這樣,你的jsp頁面就可以使用自己的tag組件了。
通常你會發(fā)現(xiàn)自己絕大多數(shù)活動都集中在 doStartTag 或 doEndTag方法里,如果在服務器端處理標簽中的正文或則是嵌套標簽時的話,還是過問一下doAfterBody。
一個簡單例子
OutputTag
package test;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class OutputTag extends TagSupport {
private String name=null;
public void setName(String name) {
this.name = name;
}
public int doEndTag() throws JspException
{
try {
JspWriter out = pageContext.getOut();
out.print("Hello! " + name);
} catch (Exception e) { throw new JspException(e); }
return EVAL_PAGE;
}
}
相關推薦:計算機二級JAVA備考:JAVA獲得域名的IP地址北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |