热门系列:

  • 【Java编程系列】WebService的使用

  • 【Java编程系列】在Spring MVC中使用工具类调用Service层时,Service类为null如何解决

  • 【Java编程系列】Spring中使用代码实现动态切换主从库(多数据源)

  • 【Java编程系列】log4j配置日志按级别分别生成日志文件

  • 【Java编程系列】使用Java进行串口SerialPort通讯

  • 【Java编程系列】comet4j服务器推送实现

  • 【Java编程系列】使用JavaMail通过SMTP协议发送局域网(内网)邮件

  • 【Java编程系列】解决Java获取前端URL中加号(+)被转换成空格的问题

  • 【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选

  • 【Java编程系列】Java与Mysql数据类型对应表

  • 【Java编程系列】二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!!

  • 程序人生,精彩抢先看


目录

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;@Overridepublic 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,所以取的比较随意,建议大家若要使用的话还是用规范命名。

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

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

【Java编程系列】Java自定义标签-Tag相关推荐

  1. java自定义标签 map_基于Spring MVC的自定义标签Tag

    基于Spring MVC的自定义标签Tag 1.环境准备 本次小项目基于Spring MVC进行测试呈现,项目依赖的jar文件列表如下: 2.搭建SpringMVC Spring MVC环境最关键的两 ...

  2. 【Java编程系列】java用POI、Itext生成并下载PPT、PDF文件

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  3. 【Java编程系列】log4j配置日志按级别分别生成日志文件

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  4. 【Java编程系列】使用Java进行串口SerialPort通讯

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  5. 【Java编程系列】Minio实现文件上传下载

    热门系列: [Java编程系列]Amazon S3实现文件上传下载 目录 热门系列: 1.前言 2.Minio实战代码 2.1 Minio环境部署 2.2 Minio的Sdk对接实现 2.2.1 Mi ...

  6. 【Java编程系列】Java判断世界各时区的夏令时、冬令时

    热门系列: [Java编程系列]java用POI.Itext生成并下载PPT.PDF文件 [Java编程系列]二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!! 程序人生,精彩抢先看 目 ...

  7. 【Java编程系列】gateway限流实践时发生的问题和解决方案

    前期回顾: [Java编程系列]Springcloud-gateway自带限流方案实践篇 1.实践中发生的问题 主要有以下几个问题: 1.限流返回的响应数据无法自定义 (LogFormatUtils. ...

  8. Re0:Java编程系列-3 进阶排序思维分析与对比

    Re0:Java编程系列 作者参加校招,在复习Java的同时,决定开一打系列博客.复习的同时,作者希望能留下材料,方便也服务一些新入门的小伙伴. 本系列文章从基础入手,由简单的功能函数开始,再扩展为类 ...

  9. 35.JAVA编程思想——JAVA IO StreamTokenizer

    35.JAVA编程思想--JAVA IO StreamTokenizer 尽管StreamTokenizer并不是从 InputStream或 OutputStream衍生的,但它只随同InputSt ...

最新文章

  1. easyui validate 后 使用ajax提交
  2. reportInterruptAfterWait
  3. pytorch load state dict_PyTorch 学习笔记(五):Finetune和各层定制学习率
  4. 京东 | NLP人才联合培养计划
  5. 1.C#WinForm基础制作简单计算器
  6. HTML-盒子模型(padding-margining)-样式继承-浮动
  7. URAL 1820. Ural Steaks(数学啊 )
  8. 应用安全-CMF/CMS漏洞整理
  9. Veritas Backup Exec 21设置备份任务
  10. 高等数学教材上册复习
  11. web系统变慢了,怎么排查原因
  12. 2112731-95-8,N-(Azido-PEG3)-N-Boc-PEG4-acid与炔丙基、BCN或DBCO试剂进行点击化学反应
  13. wandb报错:Exception: The wandb backend process has shutdown
  14. 如何通过DFMA实现DFX
  15. homebrew安装常见错误解决
  16. 服务器tomcat成功运行但是无法在外网访问的解决办法
  17. 淘宝买零件组装一台手机,可以正常使用,想自己组装手机的可以看下
  18. PHP实现字母递增至AA...AZ...ZZ
  19. SDCC教程(树莓派 Debian11 bullseye 使用官方下载源)
  20. 开源系统搭建私有云盘,育网校园云盘系统

热门文章

  1. 误码率BER计算原理及仿真输出
  2. 2011年5月5日日志
  3. ic启动器我的世界_hmcl启动器下载
  4. 平均负载(load average)
  5. 沪深新股资金申购区别
  6. 0、Java项目开发环境搭建
  7. 华为云Windows云服务器如何配置多用户登录?
  8. 什么是微突发?如何定位微突发?
  9. 新书交稿了!!!!!!!!!!!!!!!!
  10. mysql error 1044