• 自定义标签库_tag


    1)最简单的标签库

      1,继承Tag接口,重写doEndTag()方法,返回类型不同后面流程不一样

        想要jsp的内容必须重写了setPageContent()方法

        再JspWriter out = pageContext.getOut();

    package myTag;
    
    import java.io.IOException;
    import java.util.ResourceBundle;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.Tag;
    
    public class Copyright implements Tag {
        private PageContext pageContext;
        private Tag parent;
    
        @Override
        public int doEndTag() throws JspException {
            // TODO Auto-generated method stub
            JspWriter out = pageContext.getOut();
            try {
                out.println("<div align=center style='line-height:22px;"
                        + "font-size:12px;'>");
                out.println(ResourceBundle.getBundle("copyright").getString(
                        "copyright"));
                out.println("</div>");
            } catch (IOException e) {
                throw new JspException(e);
            }
    
            return EVAL_PAGE;
        }
    
        @Override
        public int doStartTag() throws JspException {
            // TODO Auto-generated method stub
            return SKIP_BODY;
        }
    
        @Override
        public Tag getParent() {
            // TODO Auto-generated method stub
            return this.parent;
        }
    
        @Override
        public void release() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void setPageContext(PageContext pc) {
            // TODO Auto-generated method stub
            this.pageContext = pc;
        }
    
        @Override
        public void setParent(Tag t) {
            // TODO Auto-generated method stub
            this.parent = t;
        }
    }
    View Code

      2,在WEB-INF/目录下创建tld文件(new/other创建

      bodycontent有三个值,empty表示不可以有标签体,jsp表示可以有标签体,tagdependent可以有但不会执行

    <taglib>
     <tlib-version>1.0</tlib-version>
     <jsp-version>1.2</jsp-version>
     <short-name>taglib</short-name>
     <tag>
         <name>copyright</name>
         <tagclass>myTag.Copyright</tagclass>
         <bodycontent>JSP</bodycontent>
     </tag>
    </taglib>

       3,由于我用了资源文件

      ResourceBundle.getBundle("copyright").getString("copyright")

        所以src文件下一定要有这个文件的copyright属性

      4,在jsp中首先声明,<%@ taglib uri="WEB-INF/xxx.tld" prefix="taglib">

        下面就可以<taglib:copyright/>


     2)带属性的第标签

    TagSupport类实现了Tag接口,根据需要重写你的doStartTag或者doEndTag方法就好了

    在类里面定义了这个private属性和setter方法

    在tld文件也要去添加修改<attribute>

         <attribute>
             <name>name</name>
             <required>true</required>
             <rtexprvalue>true</rtexprvalue>
         </attribute>

    <required>表示是否必需的

    <rtexprvalue>表明是否允许EL表达式或者<%= %>

    当有多个参数的时候照样子添加private属性和setter方法


    3)带标签体的标签

    这时候我们可以使用BodyTagSupport来获得更加丰富的控制,如doInitBody()和doAfterBody()方法

    不过他们在进行doStartTag或者doEndTag的方法的时候都会返回常量

    SKIP_BODY=0//不跑标签体

    EVAL_BODY_INCLUDE=1//跑标签体

    SKIP_PAGE=5//强行结束

    EVAL_PAGE=6//正常结束

    使用this.getBodyContent().getString()获得标签体的内容

  • 相关阅读:
    威尔逊定理  知识点
    费马小定理及推论 知识点
    勾股定理和勾股数
    hdu6441 Find Integer (费马大定理)
    费马大定理
    莫队算法 [国家集训队]小Z的袜子
    R49 A-D D图有向有环图
    #505 1&2 A-C 后面未完成
    stack 的一些用法
    bzoj 2844 albus就是要第一个出场 异或和出现次数 线性基
  • 原文地址:https://www.cnblogs.com/vhyc/p/6626756.html
Copyright © 2020-2023  润新知