jsp自定义标签

来源:互联网 发布:长相忆五色石南叶 知乎 编辑:程序博客网 时间:2024/06/07 04:55

最近项目大改,原本的静态页面要全部改成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>
<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:hasPermissionname="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代码被隐藏,不被用户看到。

这只是一个简单的自定义标签,如果需要实现更复杂的功能,一般只需要丰富处理类的逻辑处理就可以了,确实非常的方便。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果6s后盖氧化怎么办 苹果6s后壳氧化怎么办 食道癌吃了就吐怎么办 有眼袋和泪沟怎么办? 泪沟和眼袋都有怎么办 脸上的汗毛很长怎么办 点痣留下褐色印怎么办 氮氧传感器坏了怎么办 考试车离合太松怎么办 胎心监护不过关怎么办 羚羊角的功效与作用发烧怎么办 小孩上课注意力不集中怎么办 2岁宝宝不会说话怎么办 小孩脖子上长淋巴结怎么办 小孩子上课注意力不集中该怎么办 脸过敏干燥起皮怎么办 脸上皮肤干燥起皮怎么办 身上皮肤干燥起皮怎么办 皮肤暗黄有色斑怎么办 我皮肤干燥暗黄怎么办 脸上有皮肤暗黄怎么办 皮肤暗黄毛孔大怎么办 脸上很干燥起皮怎么办 脸上的皮肤起皮怎么办 身体的皮肤好干怎么办 滴油雾化器炸油怎么办 已经发炎的痘痘怎么办 被养生馆骗了怎么办 做完微针结痂了怎么办 秋季脸干燥起皮怎么办 身上的皮肤太干怎么办 板材眼镜腿松了怎么办 超声刀后喝酒了怎么办 开眼角疤痕增生了怎么办 开了眼角有增生怎么办 全切双眼皮留疤怎么办 开内眼角留疤了怎么办 开眼角长了颗粒怎么办 开刀后疤痕庝痛怎么办 眼角开得太尖了怎么办 眼角开得太大了怎么办