jsp自定义标签
2015-06-24 22:36
603 查看
最近项目大改,原本的静态页面要全部改成jsp,经理让我写一个自定义jsp标签,处理权限问题,不用不知道,写出来后发现用自定义标签的方法控制权限,比静态页面中在js里繁琐的判断方便很多,于是记载一下,以留后用,具体的方法是在一个不知名的朋友的博客看到的,由于当时搜了很多,忙于项目,没有保留地址,这里就不放传送门了。
一、首先要写一个tld文件,放在WEB-INF下面,用来定义这个标签的名字,属性,以及后台的处理类。
<?xml version="1.0" encoding="utf-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 标签描述 -->
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version><pre name="code" class="html"><span style="white-space:pre"> </span><!-- 标签简称 --> <short-name>crb</short-name><uri>/isHasPermission</uri><description>JSP Self-define Tag Library.</description><tag><description>This is an authority tag</description>
处理类 --><tag-class>com.zzvc.crb.tag.HasPermission</tag-class><!-- 设置标签内部内容的处理方式 --><body-content>JSP</body-content><!-- 标签属性 --><attribute><name>name</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>
其中<body-content>标签属性可变,这里bodycontent有三个可选值
1. jsp :标签体由其他jsp元素组成 ,如果其有jsp元素,那么标签会先解释,然后将元素的实际值传入。比如标签体里含有<%=attributeName%>这样子的jsp元素,此时标签会按attributeName的实际值是什么就传入什么。这个是最常用的一个。
2. empty :标签体必须为空 ,在引用这个Tag的时候,可以<crb:hasPermission name="PERSON_READ" />,而不必<crb:hasPermission
name="PERSON_READ" ></crb:hasPermission >
3. tagdependent : 由标签解释,不带jsp转换
二、之后,需要在web.xml中配置该标签,<jsp-config>
<taglib>
<taglib-uri>/crb</taglib-uri>
<span style="white-space:pre"> </span><taglib-location>/WEB-INF/roletag.tld</taglib-location>
</taglib>
</jsp-config>三、编写标签处理类
public class HasPermission extends TagSupport {
private String name;
public int doStartTag() throws JspException {
HttpSession session = pageContext.getSession();
Person person = (Person) session.getAttribute("person");
if (person.getAuthorities().contains(name)) {
return EVAL_BODY_INCLUDE; // 正常执行
} else {
return SKIP_BODY; // 之间内容被忽略
}
}
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注意两点:
1.该类继承TagSupport;
2.标签的属性需要写成成员变量,并且声称set和get方法。
至此,这个简单的自定义标签就写好了,在jsp中可以引用:
<%@ taglib prefix="crb" uri="/isHasPermission" %>
这只是一个简单的自定义标签,如果需要实现更复杂的功能,一般只需要丰富处理类的逻辑处理就可以了,确实非常的方便。
一、首先要写一个tld文件,放在WEB-INF下面,用来定义这个标签的名字,属性,以及后台的处理类。
<?xml version="1.0" encoding="utf-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 标签描述 -->
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version><pre name="code" class="html"><span style="white-space:pre"> </span><!-- 标签简称 --> <short-name>crb</short-name><uri>/isHasPermission</uri><description>JSP Self-define Tag Library.</description><tag><description>This is an authority tag</description>
<span style="white-space:pre"> </span><!-- 标签名称 --><name>hasPermission</name><!--
处理类 --><tag-class>com.zzvc.crb.tag.HasPermission</tag-class><!-- 设置标签内部内容的处理方式 --><body-content>JSP</body-content><!-- 标签属性 --><attribute><name>name</name><required>false</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>
其中<body-content>标签属性可变,这里bodycontent有三个可选值
1. jsp :标签体由其他jsp元素组成 ,如果其有jsp元素,那么标签会先解释,然后将元素的实际值传入。比如标签体里含有<%=attributeName%>这样子的jsp元素,此时标签会按attributeName的实际值是什么就传入什么。这个是最常用的一个。
2. empty :标签体必须为空 ,在引用这个Tag的时候,可以<crb:hasPermission name="PERSON_READ" />,而不必<crb:hasPermission
name="PERSON_READ" ></crb:hasPermission >
3. tagdependent : 由标签解释,不带jsp转换
二、之后,需要在web.xml中配置该标签,<jsp-config>
<taglib>
<taglib-uri>/crb</taglib-uri>
<span style="white-space:pre"> </span><taglib-location>/WEB-INF/roletag.tld</taglib-location>
</taglib>
</jsp-config>三、编写标签处理类
public class HasPermission extends TagSupport {
private String name;
public int doStartTag() throws JspException {
HttpSession session = pageContext.getSession();
Person person = (Person) session.getAttribute("person");
if (person.getAuthorities().contains(name)) {
return EVAL_BODY_INCLUDE; // 正常执行
} else {
return SKIP_BODY; // 之间内容被忽略
}
}
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注意两点:
1.该类继承TagSupport;
2.标签的属性需要写成成员变量,并且声称set和get方法。
至此,这个简单的自定义标签就写好了,在jsp中可以引用:
<%@ taglib prefix="crb" uri="/isHasPermission" %>
<crb:hasPermission name="PERSON_READ"></crb:hasPermission>可以在标签中间编写jsp代码,如果当前用户拥有name值对应的权限,该段jsp代码就正常执行,反之,该段jsp代码被隐藏,不被用户看到。
这只是一个简单的自定义标签,如果需要实现更复杂的功能,一般只需要丰富处理类的逻辑处理就可以了,确实非常的方便。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- JSP/PHP基于Ajax的分页功能实现
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树