zoukankan      html  css  js  c++  java
  • 自定义标签库_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()获得标签体的内容

  • 相关阅读:
    OpenSSL证书生成
    支付宝支付流程
    前端获取用户位置信息
    微信公众号开发(三)
    微信公众号开发(二)
    微信公众号开发(一)
    前端优化
    页面自适应
    CSS样式(二)
    CSS样式(一)
  • 原文地址:https://www.cnblogs.com/vhyc/p/6626756.html
Copyright © 2011-2022 走看看