深入浅出自定义标签(三)操作标签体

介绍了一个自定义的权限控制标签的实现方式,该标签能够根据用户的权限决定是否展示标签体内的内容。通过查询数据库判断用户是否拥有指定权限。
有一段时间没有发表关于自定义标签的文章了,今天我向大家介绍一下包含标签体的标签的写法.代码如下:
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>
这样我们的标签就写好了.









本文转自 tony_action 51CTO博客,原文链接:http://blog.51cto.com/tonyaction/42274,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值