【Java编程系列】Java自定义标签-Tag

热门系列:


目录

1.前言

2.自定义标签Tag的使用

3.总结


1.前言

前段时间,临时调到其他项目组帮忙,做一个页面权限控制模块。当时因为业务要求,一个用户可能会对应多个角色,所以我一开始采取的做法是通过获取用户所拥有的角色,对页面模块进行分别展示或隐藏。后来该组项目负责人跟我说,因为目前需求没有完全确定,后期可能角色方面还有改动,提醒我如此做法可能不方便后期维护。于是之后他自行提出了一种自定义标签的做法,来进行权限控制。


2.自定义标签Tag的使用

自行搜索一番,实践之后证明是可行的。所以今日就来分享一下我的使用心得。

使用自定义标签之前,我们需要了解java中所提供的支持类,即TagSupport。其实还有另外一个拓展类,是BodyTagSupport,该类也是继承自TagSupport。那么两者之间唯一的区别就在于,TagSupport类是不需要与页面之间进行交互的,即不要求页面有何返回内容。而BodyTagSupport则是可以与页面进行交互的,当然TagSupport能实现的,使用BodyTagSupport也是都可以实现的。

以TagSupport为例,其类中有doStartTag()和doEndTag()两个方法。前者是在进入标签域之前所处理的方法,后者是在标签域结束后处理的方法,一般情况我们是主要使用doStartTag()

具体使用步骤(以我个人代码为例):

①先创建页面标签域控制类

package com.cams.util;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class JavaTagTest extends TagSupport{
	
	//此为传入参数
	private String par;
	
	@Override
	public int doStartTag() throws JspException {
		// TODO Auto-generated method stub
		
		//测试逻辑
		if ("1".equals(par)) {
			//TagSupport.SKIP_BODY返回则表示不显示标签体内的内容
			return TagSupport.SKIP_BODY;
		}
		//TagSupport.EVAL_BODY_INCLUDE返回则表示需要显示标签体内的内容
		return TagSupport.EVAL_BODY_INCLUDE;
	}

	public String getPar() {
		return par;
	}

	public void setPar(String par) {
		this.par = par;
	}
	
}

注意点:par为后续标签配置文件TldTest.tld中的传入参数,且必须为String类型(因为我之前用int类型试过,启动会报错)。

再者,必须给par参数设置get和set方法,否则也会报错,提示找不到set方法。

 

②配置tld文件

在WEB-INF下面创建一个以tld为后缀的文件,如我取的TldTest.tld。文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.1.2</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>Apache Shiro</short-name>  <!--标签的短名称(可以随意取) -->
    <uri>/WEB-INF/TldTest</uri>     <!-- 配置成tld文件的目录,xxx为tld文件的文件名 -->
    <description>Apache Shiro JSP Tag Library.</description> <!--标签的描述 -->
    <tag>
        <name>Test</name>    <!--标签的名称 -->
        <tag-class>com.cams.util.JavaTagTest</tag-class> <!-- 实现的类,上面编写的HasAnyPermission类 -->
        <body-content>JSP</body-content> <!--empty表示标签体内容可以为空,jsp则表示标签体内放置jsp页面元素 -->
        <attribute>                               <!--传入参数-->
            <name>par</name>              <!--参数名称--> 
            <required>true</required>             <!--是否必传-->
            <rtexprvalue>false</rtexprvalue>      <!--是否可用jsp表达式-->
        </attribute>
    </tag>
</taglib>

注意点:tag-class实现类的路径要根据自己项目的实际路径来填写,千万不能弄错了。以及uri配置文件tld的路径。

 

③页面标签使用

首先在使用自定义标签的页面引入标签。如:

<%@taglib prefix="JustFor" uri="/WEB-INF/TldTest" %>

 

再接下来就可以在页面中根据需要使用了,如:

 

接来下看下页面效果:

如此,通过后台标签域控制类的逻辑控制,已经达到了我们所想要的目的。


3.总结

自定义标签使用起来很简便,也易于理解。对于我们通常所需要使用的权限控制,内容选择等效果上,可以起到很不错的效果。但许多细节的地方也一定要警惕,否则也会出现不少错误。

另外提醒一点,内容的一些命名方面,是因为测试Demo,所以取的比较随意,建议大家若要使用的话还是用规范命名。

记录亦是学习,若有说的不全面或是有错的地方,请大家不吝赐教,欢迎来辩!!

 

本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!

 

 
 
善良勤劳勇敢而又聪明的老杨 CSDN认证博客专家 Java Spring Mysql
一个喜欢学习,热爱分享的Java技术人!年轻人,要坚持学习,耗子尾汁!
微信搜索关注时代名猿,免费领取VIP精品学习视频、BAT大厂面试资料、IT技术电子书籍
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页