有一段时间没有发表关于自定义标签的文章了,今天我向大家介绍一下包含标签体的标签的写法.代码如下:
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>
<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>
<a href="${ctx}/admin/quanchengdaohang/qcdhlb.jsp" target="rightFrame">主题业务管理</a>
</eg:if>
这样我们的标签就写好了.
本文转自 tony_action 51CTO博客,原文链接:http://blog.51cto.com/tonyaction/42274,如需转载请自行联系原作者