zoukankan      html  css  js  c++  java
  • jsp的自定义标签

    1.相对于JSTL或Spring等第三方标签库而言的,用来实现项目中特定的功能需求。
    2.自定义标签基本的组成部分
    ①页面上看得见的部分
    [1]通过taglib引入标签库
    [2]标签本身
    ②xxx.tld文件:用来注册标签处理器类
    ③标签处理器类
    3.创建一个没有属性没有标签体的自定义标签
    ①创建自定义标签的处理器类
    [1]标准要求:实现接口javax.servlet.jsp.tagext.SimpleTag
    [2]实际操作:继承javax.servlet.jsp.tagext.SimpleTagSupport
    [3]细节实现:重写doTag()方法
    ②在xxx.tld文件中注册这个标签处理器类
    [1]xxx.tld文件需要放在WEB-INF目录下
    [2]编写tld文件声明信息
    <description>Atguigu 1.0 core library</description>
    <display-name>Atguigu core</display-name>
    <tlib-version>1.0</tlib-version>
    <short-name>atguigu</short-name>
    <uri>http://www.atguigu.com/survey/tag</uri>

    [3]注册自定义标签处理器类

    <tag>
         <!-- 标签名 -->
         <name>showTime</name>
         
         <!-- 标签全类名 -->
         <tag-class>com.atguigu.myTag.TagShowTime</tag-class>
         
         <!-- 设置标签体为空 -->
         <body-content>empty</body-content>
    </tag>
    ③在页面上使用:和使用JSTL等第三方标签库没有区别
     
    4.创建一个带属性的自定义标签
    ①创建自定义标签处理器类
    ②属性传入方式
    [1]处理器类中提供和属性名对应的setXxx()方法
    [2]在tld文件中注册这个属性名
    <!-- 声明标签的属性 -->
    <attribute>
         <!-- 属性名 -->
         <name>format</name>
         
         <!-- 属性是否必须 -->
         <required>true</required>
         
         <!-- 属性是否支持EL表达式 -->
         <rtexprvalue>true</rtexprvalue>
    </attribute>
    5.创建一个带有标签体的自定义标签
    ①标签体需要执行<!-- EL表达式→Java代码→编译→执行→页面上可以显示的结果 -->
    <!-- 其他动态标签→Java代码→编译→执行→页面上可以显示的结果 -->
    <!-- HTML标签或普通文本→out.print(xxx)→执行→页面上可以显示的结果 -->
    ②执行标签体的代码
     
     
    public class AuthTag extends SimpleTagSupport {
        private String servletPath;
        @Override
        public void doTag() throws JspException, IOException {
            //获取页面的上下文对象
            PageContext context = (PageContext) getJspContext();
            HttpSession session = context.getSession();
            Admin admin = (Admin)session.getAttribute(GlobalNames.LOGIN_ADMIN);
            if(admin!=null){
                //判断是否有权限访问
                String adminName = admin.getAdminName();
                if("admin".equals(adminName)){
                    //显示内容体
                    getJspBody().invoke(null);
                    return ;
                }
                
                ServletContext servletContext = context.getServletContext();
                WebApplicationContext ioc = WebApplicationContextUtils.getWebApplicationContext(servletContext);
                //用servletPath查询资源数据
                ResMapper resMapper = (ResMapper) ioc.getBean(ResMapper.class);
                Res res = resMapper.getResByServletPath(servletPath);
                System.out.println("servletPath.......... "+servletPath);
                String codeArr= admin.getCodeArr();
                Integer resCode =res.getResCode();
                Integer resPos=res.getResPos();
                //计算验证资源是否可以访问
                boolean authority = DataprocessUtils.checkAuthority(resCode, resPos, codeArr);
                if(authority){
                    //显示内容体
                    getJspBody().invoke(null);
                    return ;
                }
            }
            //上面的条件如果有任何一个不满足,那么就不执行标签体,页面上将不显示标签体
        }
        public void setServletPath(String servletPath) {
            //为了保持与数据库一致,需要加上“/”
            this.servletPath = "/"+servletPath;
        }
    }
     
  • 相关阅读:
    初识STM32标准库
    自己写库—构建库函数雏形
    使用寄存器点亮LED等
    新建工程---寄存器版
    什么是寄存器
    初识STM32
    ST-LINK驱动的安装
    MDK5使用技巧
    开发环境的搭建
    1行Python代码制作动态二维码
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7511021.html
Copyright © 2011-2022 走看看