簡單標籤

 

簡單標籤

實現了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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章