天天看點

深入淺出自定義标簽(三)操作标簽體

有一段時間沒有發表關于自定義标簽的文章了,今天我向大家介紹一下包含标簽體的标簽的寫法.代碼如下:

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 {

           } 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>

這樣我們的标簽就寫好了.

本文轉自 tony_action 51CTO部落格,原文連結:http://blog.51cto.com/tonyaction/42274,如需轉載請自行聯系原作者