一、了解jsp自定义标签

自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对tag handler的对象的操作,即当servlet执行时Web 容器调用那些操作。

好处:1.JSP标签主要用来显示结果数据,用来沟通表示层和业务逻辑层,把页面美工工作和程序编写分开。

2. 自定义标签方便JSP页面代码的维护,代码重用。

二、按钮权限控制实例

1、创建处理标签的java类ButtonPermissionTag

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;public class ButtonPermissionTag extends TagSupport  {/*** */private static final long serialVersionUID = 3995418178864580338L;private String name;public ButtonPermissionTag() {}@Overridepublic int doStartTag() throws JspException {try {if ("true".equals(name)) {return EVAL_BODY_INCLUDE;}return SKIP_BODY;} catch (Exception e) {throw new RuntimeException("数据加载异常",e);}}public void setName(String name) {this.name = name;}}

上边的java类继承了TagSupport, 重写了doStartTag方法,在方法里面实现我们想要的需求效果。

2、创建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 version="2.0" xmlns="http://Java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>btn</short-name><uri>http://test.com</uri>
<tag>  <name>hasPermission</name>  <tag-class>com.tarena.platform.base.tags.ButtonPermissionTag</tag-class>  <body-content>JSP</body-content>   <attribute>  <name>name</name>  <required>true</required>  <rtexprvalue>true</rtexprvalue>  </attribute>
</tag>
</taglib>

3、在web.xml中配置标签

<jsp-config><taglib>......</taglib><taglib>......</taglib><taglib><taglib-uri>http://test.com</taglib-uri><taglib-location>/WEB-INF/common/tag/button.tld</taglib-location></taglib></jsp-config>

4 、页面引用

先引入自定义标签

<%@taglib prefix="btn" uri="http://test.com" %>

在jsp页面中引用:

              <btn:hasPermission name="true"><button type="button" class="btn btn-primary btn-sm" id="btn_reset">测试按钮</button></btn:hasPermission>

根据我们自定义的java类可知,当name=true时按钮显示,当name=false时,按钮隐藏。由此我们实现了简单的按钮权限控制。博友们可以根据此例做扩展,实现后台管理系统的权限控制。

三、标签中的静态常量

1、EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 
SKIP_BODY:告诉服务器不要处理正文内容 
EVAL_PAGE:让服务器继续执行页面 
SKIP_PAGE:让服务器不要处理剩余的页面 
EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回 
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回

EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。

2、doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;

自定义jsp标签实现按钮权限控制相关推荐

  1. 通过servlet.jsp.tagext.TagSupport的自定义标签实现按钮权限控制

    2019独角兽企业重金招聘Python工程师标准>>> 第一步:定义标签格式 如下图先在安全目录下建立一个tld文件 内容代码如下 <?xml version="1. ...

  2. thymeleaf模板+Shiro标签对按钮权限的控制

    thymeleaf模板+Shiro标签对按钮权限的控制 环境介绍 SpringBoot+Shiro+thymeleaf模板+Layui(前端) 这两天学习了shiro相关的技术,碰到一个问题:如何根据 ...

  3. 使用tld文件自定义jsp标签库

    目录 一,标签库描述文件(tld文件) 二,标签处理类 三,在JSP页面中使用自定义的标签 四,举个例子 通过Java的TagSupport类或者BodyTagSupport类,和配套的tld文件,可 ...

  4. 2011级-csdn-java-张侃—自定义JSP标签(一)

    自定义JSP标签概述 •         自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用.当页面中需要使用类似 ...

  5. Vue 前端页面按钮权限控制

    前言 按钮权限控制的功能其实在前面的一篇的页面权限管理也包含有这个功能,但是没有凸显出来,所以现在单独写一篇文章用来记录一下 一.什么是按钮权限控制? 刚刚做完了一个后台管理系统,有用到按钮权限控制, ...

  6. java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)

    <JavaWeb开发>课程计划表 Web的概念及其演变 课程内容: ? Web的概念.特点 ? HTTP协议简介 ? Web技术的发展:静态文档,Web应用,Web服务 JavaWeb应用 ...

  7. vue 按钮 权限控制

    vue 按钮 权限控制 前言 在日常项目中,会碰到需要根据后台接口返回的数据,来判断当前用户的操作权限.必须当有删除权限时,就显示删除按钮.没有这个权限时,就不显示或者删除这个按钮.通过查找资料,通过 ...

  8. java按钮权限控制_aop (权限控制之功能权限)

    在实际web开发过程中通常会存在功能权限的控制,不如这个角色只允许拥有查询权限,这个角色拥有CRUD权限,当然按钮权限显示控制上可以用button.tld来控制,本文就不说明. 具体控制流程就是通过登 ...

  9. 自定义jsp标签来防止表单的重复提交

    在之前的工作和学习中总是会遇到表单重复提交的问题,使用了网上的各种解决方法 js,禁用提交按钮,阻止用户后退等操作,但是效果总有一些欠缺.在这里参考了某位老师的意见,决定使用session和自定义表单 ...

最新文章

  1. 盲人计算机培训计划,中国盲人协会-河南省郑州市盲人按摩培训班教学大纲及计划...
  2. curl php 空,直接访问链接有数据,CURL GET 一片空白
  3. [HOW TO]-github/gitee的仓库统一管理
  4. 操作系统--用JavaScript实现银行家算法
  5. c语言创建一个顺序表主函数,用C语言来创建一个顺序表(数据结构部分)
  6. usermod命令 、用户密码管理、mkpasswd命令
  7. error_logs
  8. 2010中小网站运营报告:社区论坛网站后来居上
  9. android5.1禁用通知栏,android-阻止通知栏
  10. uniapp下载文件保存到手机本地
  11. 设置DIV最小高度以及高度自适应随着内容的变化而变化
  12. 路径规划算法:Dijkstra算法 - 附代码
  13. ABAP:cl_system_uuid=>create_uuid_c32_static( )
  14. kuangbin 简单搜索 A 棋盘问题
  15. 泛微平台ecology8.0二进制文件流下载对接接口
  16. python 风玫瑰图_【求助】风玫瑰图
  17. 一周小结(你不要小看业务)
  18. CondaValueError : prefix already exists: /**/anaconda3
  19. Batter Charger EC之间的数据交互
  20. 零数据分析实习经历如何秋招?

热门文章

  1. 《概率论与数理统计》之概率函数、概率分布函数与概率密度函数理解
  2. 模拟退火算法——理论篇
  3. 视频教程-[曾贤志]-Excel数据透视表与SQL技术-Office/WPS
  4. D3.js的v5版本入门教程(第十三章)—— 饼状图
  5. 基于ffmpeg实现音视频转码
  6. MongoDB删除记录
  7. 数据分析技能点-单变量分析和基础统计
  8. 心灵之窗-视觉研究的进展、应用与意义
  9. 《QBQ问题背后的问题》读书笔记
  10. 教你从零开始做外贸网站搭建?