簡單標籤
實現了SimpleTag接口的標籤通常成爲簡單標籤
setJspContext方法:用於把jsp頁面的pageContext對象傳遞給標籤處理器對象,從而通過pageContext對象獲得web編程中的其他的八個內置對象(request、response、….)
setParent方法:用於把父標籤處理對象傳遞給當前標籤處理器對象
getParent方法:用於獲得當前標籤處理器對象的父標籤
setJspBoay方法:用於把代表標籤體的fragment對象傳遞給比羣毆前處理器對象
dotage方法:用於完成所有的標籤邏輯,包括輸出、迭代、修改標題內容等。
在此方法中可以跑出javax.jspSkipPageException異常,用於通知web容器不再執行jsp頁面中位於結束標記或面的內容,這等小雨傳統標籤的doEndTag、方法中返回Tag.SKIP_AGE敞亮的情況。
JspFragment類
·此類的實例代表一段符合jsp語法的jsp代碼,這段代碼
中不能包含腳本元素
·weeb容器在處理簡單標籤時,會把標籤內容用一個jspfargment對象表示,並調用標籤處理器對象的setJspBody方法把JspFragment對象傳遞給標籤處理器對象,
JspFragment類中只定義了兩個方法:
getJspContext方法、invokie(java.io.Writer out)
invoke方法詳解
簡單標籤的應用
1、 利用簡單標籤完成自定義標籤以後的jsp頁面是否進行顯示
創建一個標籤處理器
//利用自定義標籤完成標籤以後的內容是否顯示
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
//JspFragment jf=this.getJspBody();//獲取標籤體
//處理標籤體
//jf.invoke(null);//到客戶端顯示,如果沒有標籤體這句話可能會拋異常
throw new SkipPageException();//利用此異常來控制是否顯示自定義標籤以後的jsp頁面
}
在tld中進行描述
<tag>
<name>demo7</name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo7</tag-class>
<body-content>scriptless</body-content>
</tag>
2、 利用簡單標籤完成迭代
創建一個標籤處理器
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
JspFragment jf=this.getJspBody();
for(int i=0;i<count;i++){
jf.invoke(null);
}
}
增加一個屬性:count
private int count;//要和jsp中的屬性名稱一致
public void setCount(int count) {
this.count = count;
}
在tld文件中進行描述
<tag>
<name>demo8</name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo8</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>count</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3、 簡單標籤控制標籤體的內容進行修改
編寫處理器
@Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
JspFragment jf=this.getJspBody();//獲取標籤體內容
StringWriter sw=new StringWriter();//得到一個流對象
jf.invoke(sw);//將標籤體的內容寫入到流中
String content=sw.toString().toUpperCase();//大小寫進行轉換
JspWriter jw=this.getJspContext().getOut();//獲取到輸出流
jw.write(content);//將轉換後的內容輸出
}
Tld文件描述
<tag>
<name>demo9</name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo9</tag-class>
<body-content>scriptless</body-content>
</tag>
二、帶屬性的標籤
<csdn:demo8 count=”9”>
</csdn:demo8>
標籤處理器中一定也得包含一個私有的屬性count和setter方法(給屬性賦值)
Dotage方法包含業務邏輯代碼
Tld文件中
<Tag>
<name></name>
<tag-class></tad-class>
<body-content></body-content>
<attirbute>
<name></name>
<requeired></requeired>//是否是必須的
<rtexprvalue></rtexprvalue>//是否可以爲el表達式運行時表達式計算:<csdn:demo count=”${date}”>或者是<%=date+1%>
</attribute>
</Tag>