有一段時間沒有發表關於自定義標籤的文章了,今天我向大家介紹一下包含標籤體的標籤的寫法.程式碼如下:
import java.io.IOException;

import java.sql.SQLException;

import java.util.Map;

import java.util.List;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.BodyTagSupport;

 

import com.tianjin.canic.tjeg.dao.JdbcDaoSupport;

 //這是一個許可權控制的自定義標籤

public class QxIfTag extends BodyTagSupport {

      private JdbcDaoSupport dao;
//定義一個成員變數用於向資料庫查詢許可權
      public String code;
//許可權標識

      public String getCode() {

           return code;

      }

      public void setCode(String code) {

           this.code = code;

      }

//在doStartTag方法中編寫程式碼

      @Override

      public int doStartTag() throws JspException {

           if(dao == null)

                 this.dao = new JdbcDaoSupport();
//由於父類BodyTagSupport中有一個成員變數      pageContext,我們知道pageContext可以得到jsp中的9大物件,所以得到Session是輕而易舉的事情,我們獲得Session中使用者的ID,然後查詢資料庫來的道這個使用者是否有某一特定的許可權(public String code) 如果有的話會執行標籤替中的程式碼   
String admin_id = (String) this.pageContext.getSession().getAttribute(

           “ADMIN_ID”);

           if (“”.equals(code) && code == null) {

                 return SKIP_BODY;//跳過標籤體

           }

           try {

                 if (“”.equals(admin_id) && admin_id == null)

                      return SKIP_BODY;//跳過標籤體

                 List list = this.dao

                            .queryForList(“SELECT QUANXIAN FROM TJEG_ADMIN WHERE ADMIN_ID = `

                                       + admin_id + “`“);

                 boolean b = false;

                 for (int i = 0; i < list.size(); i++) {

                      Map map = (Map) list.get(i);

                      if(((String)map.get(“QUANXIAN“)).indexOf(code) != -1)

                            b = true;

                 }

                 if (b) {//如果條件滿足

                      return EVAL_BODY_INCLUDE;//包含標籤體

                 } else {

                      return SKIP_BODY;//跳過標籤體

                 }

           } catch (SQLException e) {

                 e.printStackTrace();

           }

           return SKIP_BODY;

      }

}
在taglib.tld檔案中需要這麼寫,
<tag>
  <name>if</name>
  <tagclass>com.xxxx.xxxx.utils.QxIfTag</tagclass>
  <attribute>
   <name>code</name>
   <required>false</required>
   <rtexprvalue>false</rtexprvalue>
  </attribute>
 </tag>
我們已經寫好配置檔案了,繼續複習一下,看jsp頁面該怎麼寫,
<%@ taglib prefix=”eg” uri=”/WEB-INF/taglib.tld”%>
jsp頁面上要先寫這一行,將taglib.tld檔案引入進來.
然後這樣寫
<eg:if code=”主題業務”>
  <a href=”${ctx}/admin/quanchengdaohang/qcdhlb.jsp” target=”rightFrame”>主題業務管理</a> 
 </eg:if>
這樣我們的標籤就寫好了.