• 自定义标签的作用


                    1)控制标签体内容是否输出

                                2)控制标签余下内容是否输出

                                3)控制重复输出标签体内容

                                4)改变标签体内容

                                5)带属性的标签

    package com.loaderman.demo.a_tag;
    
    import java.io.IOException;
    import java.io.StringWriter;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.SkipPageException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    /**
     * 标签处理器类
     * @author APPle
     *
     */
    public class DemoTag extends SimpleTagSupport{
        //1.声明属性的成员变量
        private Integer num;
        
        //2.关键点: 必须提供公开的setter方法,用于给属性赋值
        public void setNum(Integer num) {
            this.num = num;
        }
    
    
        @Override
        public void doTag() throws JspException, IOException {
            System.out.println("执行了标签");
            
            /**
             * 1)控制标签内容是否输出
             *    输出: 调用jspFrament.invoke();
             *    不输出: 不调用jspFrament.invoke();
             */
            //1.1 得到标签体内容
            JspFragment jspBody = this.getJspBody();
            
            /**
             * 执行invoke方法: 把标签体内容输出到指定的Writer对象中
             */
            //1.2 往浏览器输出内容,writer为null就是默认往浏览器输出
            //JspWriter out = this.getJspContext().getOut();
            //jspBody.invoke(out);
            jspBody.invoke(null);//等价于上面的代码
            
            /**
             * 3)控制重复输出标签体内容
             *     方法: 执行多次jspBody.invoke()方法
             */
            /*for(int i=1;i<=num;i++){
                jspBody.invoke(null);
            }*/
            
            /**
             * 4)改变标签体内容
             */
            //4.1 创建StringWriter临时容器
            /*StringWriter sw = new StringWriter();
            //4.2 把标签体拷贝到临时容器
            jspBody.invoke(sw);
            //4.3 从临时容器中得到标签体内容
            String content = sw.toString();
            //4.4 改变内容
            content = content.toLowerCase();
            //System.out.println(content);
            //4.5 把改变的内容输出到浏览器
            //jspBody.invoke(null); 不能使用此方式输出,因为jsbBody没有改变过
            this.getJspContext().getOut().write(content);*/
            
            
            /**
             * 2)控制标签余下内容是否输出
             *   输出: 什么都不干!
             *   不输出: 抛出SkipPageException异常
             */
            throw new SkipPageException();
            
        }
    }

    loaderman.tld文件

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
      <!-- 标签库的版本 -->
      <tlib-version>1.1</tlib-version>
      <!-- 标签库前缀 -->
      <short-name>loaderman</short-name>
      <!-- tld文件的唯一标记 -->
      <uri>http://loaderman.cn</uri>
      <tag>
        <name>demoTag</name>
        <tag-class>com.loaderman.demo.a_tag.DemoTag</tag-class>
        <body-content>scriptless</body-content>
        <!-- 属性声明 -->
        <attribute>
            <!-- 属性名称 -->
            <name>num</name>
            <!-- 是否必填 -->
            <required>true</required>
            <!-- 是否支持EL表达式 -->
            <rtexprvalue>false</rtexprvalue>
        </attribute>
      </tag>
      
    </taglib>

  • 相关阅读:
    [zhuanzai]Bean对象注入失败 .NoSuchBeanDefinitionException: No qualifying bean of type..
    Quartz框架介绍
    [转载]springboot--常用注解--@configration、@Bean
    [转载]ac mysql 无法远程连接
    【转载】总结:几种生成HTML格式测试报告的方法
    【转载】SELENIUM2支持无界面操作(HTMLUNIT和PHANTOMJS)
    Code Coverage for your Golang System Tests
    [转载]pytest学习笔记
    数据库系统概论-第一章
    数据库系统概论-目录篇
  • 原文地址:https://www.cnblogs.com/loaderman/p/10002360.html
Copyright © 2020-2023  润新知