• SimpleTag——认识自定义标签


    自定义标签

    自定义标签的开发与应用步骤

    • 编写完成标签功能的 Java 类(标签处理器)
    • 编写标签库描述(tld)文件,在tld文件中对自定义中进行描述
    • 在 JSP 页面中导入和使用自定义标签

    ①. 创建一个标签处理器类: 实现javax.servlet.jsp.tagext.SimpleTag接口. 

    package yang.mybatis.tag;
    import javax.servlet.jsp.JspContext;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.JspTag;
    import java.io.IOException;
    
    /**
     * Created by yangshijing on 2017/11/24 0024.
     */
    public class HelloSimpleTag implements javax.servlet.jsp.tagext.SimpleTag{
        @Override
        public void doTag() throws JspException, IOException {
            System.out.println("doTag");
        }
    
        @Override
        public void setParent(JspTag jspTag) {
            System.out.println("setParent");
    
        }
    
        @Override
        public JspTag getParent() {
            System.out.println("getParent");
            return null;
        }
    
        @Override
        public void setJspContext(JspContext jspContext) {
            System.out.println("setJspContext");
    
        }
    
        @Override
        public void setJspBody(JspFragment jspFragment) {
            System.out.println("setJspBody");
    
        }
    } 

    ②. 在 WEB-INF 文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件. 

    <?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">
        <!--描述TLD 文件-->
        <description>MyTag 1.0 core library</description>
        <display-name>MyTag core</display-name>
        <tlib-version>1.0</tlib-version>
        <!--建议在Jsp页面上使用的标签的前缀-->
        <short-name>myshortname</short-name>
        <!-- 作为 tld 文件的 id, 用来唯一标识当前的 TLD 文件, 多个 tld 文件的 URI 不能重复. 通过 JSP 页面的 taglib 标签的 uri 属性来引用. -->
        <uri>http://mycompany.com</uri>
    
        <!-- Invoke 'Generate' action to add tags or functions -->
        <!--描述自定义的HelloSimpleTag 标签-->
        <tag>
            <!--标签名,在 JSP 页面上使用标签时的名字-->
            <name>hello</name>
            <!--标签所在的全类名-->
            <tag-class>yang.mybatis.tag.HelloSimpleTag</tag-class>
            <!--标签体的类型-->
            <body-content>empty</body-content>
        </tag>
    </taglib>

    ③. 在 tld 文件中描述自定义的标签:

    <!-- Invoke 'Generate' action to add tags or functions -->
        <!--描述自定义的HelloSimpleTag 标签-->
        <tag>
            <!--标签名,在 JSP 页面上使用标签时的名字-->
            <name>hello</name>
            <!--标签所在的全类名-->
            <tag-class>yang.mybatis.tag.HelloSimpleTag</tag-class>
            <!--标签体的类型-->
            <body-content>empty</body-content>
        </tag>

    ④. 在 JSP 页面上使用自定义标签:

    • 使用 taglib 指令导入标签库描述文件: 
    <%@taglib uri="http://mycompany.com" prefix="nchu" %>
    • 使用自定义的标签: 
     <nchu:hello/>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%--导入标签库描述文件--%>
    <%@taglib uri="http://mycompany.com" prefix="nchu" %>
    <%@ taglib prefix="nchu" uri="http://mycompany.com" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <nchu:hello/>
    </body>
    </html>

     

    ⑤.从结果可以看出,使用自定义标签时,首先调用自定义SimpleTag实现类的SetJspContext()方法,然后调用doTag()方法

    @Override
        public void setJspContext(JspContext jspContext) { 
        System.out.println(
    "setJspContext");
      }

    JspContext 是PageContext的父类,通过该方法传入的参数既是PageContext对象;可以通过PageContext对象获取jsp的隐含对象,进而在doTag()方法中对自定义标签实现功能。

    在浏览器上输出Hello World

    package yang.mybatis.tag;
    import javax.servlet.jsp.JspContext;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.JspTag;
    import java.io.IOException;
    
    /**
     * Created by yangshijing on 2017/11/24 0024.
     */
    public class HelloSimpleTag implements javax.servlet.jsp.tagext.SimpleTag{
        private  PageContext pageContext;
        @Override
        public void doTag() throws JspException, IOException {
            pageContext.getOut().print("Hello world!");
            System.out.println("doTag");
        }
    
        @Override
        public void setParent(JspTag jspTag) {
            System.out.println("setParent");
    
        }
    
        @Override
        public JspTag getParent() {
            System.out.println("getParent");
            return null;
        }
    
        @Override
        public void setJspContext(JspContext jspContext) {
            pageContext = (PageContext) jspContext;
            boolean b = jspContext instanceof PageContext;
            System.out.println("setJspContext "+b);
    
        }
    
        @Override
        public void setJspBody(JspFragment jspFragment) {
            System.out.println("setJspBody");
    
        }
    }

  • 相关阅读:
    CF1552 D. Array Differentiation
    CF1542 B. Plus and Multiply
    CF1543 D1. RPD and Rap Sheet (Easy Version)
    CF1555 E. Boring Segments(线段树+双指针)
    CF1513 D. GCD and MST
    hdu 6194 string string string
    CF1527 B2. Palindrome Game (hard version)
    DDD领域驱动设计落地实践(十分钟看完,半小时落地)
    【5分钟】W10 64bit系统本地安装postgresql 11
    程序员如何成为架构师
  • 原文地址:https://www.cnblogs.com/realshijing/p/7890155.html
Copyright © 2020-2023  润新知