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

    自定义标签:就是根据需求,自己定义的标签,可以定义标签的名字、属性、作用等。


    自定义标签由两部分组成

    • *.tld文件:是一个XML文件,用来定义标签名字、属性、标签处理类、标签体等
    • *.class文件:每一个标签,都对应一个标签处理器类,这个类遵守一定规范,即需要继承或实现API中的特定类或接口,覆盖其中方法。也是自定义标签的主要工作


    通过java类实现自动义标签的步骤

    • 首先需要在一个tld文件中描述标签。tld文件存在WEB-INF下。
    <?xml version="1.0" encoding="UTF-8"?>
    <taglib>
    <tlib-version>1.2</tlib-version>
    <jsp-version>2.1</jsp-version>
    <short-name>mj</short-name>
    <uri>http://www.cnmj.com/taglib</uri> 
    <tag>
    <name>getAttr</name>
    <tag-class>com.maji.taglib.GetTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
    <name>attr</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute>
    </tag>
    </taglib> 


    uri:是这个tld文件的唯一标记,可以自定义,不一定是真实存在的URL。使用自定义标记时将根据该值寻 找tld文件。
    tag:tld文件中将定义多个tag元素,描述多个标签。
    name:标签的名字
    tag-class:实现该标签功能的类,是之后主要的工作
    attribute:标签的属性,可以定义多个
    name:属性名字
    required:属性是否必须,true为必须
    rtexprvalue:属性是否能使用运行期表达式传值,true表示必须


    标签处理器类必须继承或实现API中的类,覆盖特定的方法
    如doStartTag方法

    例:
    (jsp文件)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://www.cnmj.com/taglib" prefix="mj"%><!-- 导入自定义标签的uri并命名 -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    pageContext.setAttribute("msg", "hello jsp");
    %>
    <mj:getAttr attr="msg"/><!-- 调用标签并传参 -->
    </body>
    </html>

    (java文件,继承javax.servlet.jsp.tagext.TagSupport类)

    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.TagSupport;
    
    public class GetTag extends TagSupport {
    
    /**
    * 序列号
    */
    private static final long serialVersionUID = -790027529044181404L;
    
    private String attr;//参数,需和tld文件中的attribute的name一致
    
    public GetTag() {
    }
    
    public String getAttr() {
    return attr;
    }
    
    public void setAttr(String attr) {//必须要有参数的setter方法
    this.attr = attr;
    }
    
    @Override//重写方法
    public int doStartTag() throws JspException {
    //通过pageContext获取对象和方法
    Object attribute = this.pageContext.getAttribute(attr);
    JspWriter out = this.pageContext.getOut();
    try {
    out.write((String)attribute);
    } catch (IOException e) {
    e.printStackTrace();
    }
    return super.doStartTag();
    }
    
    }
  • 相关阅读:
    Xcode 配置常用变量(SRCROOT, PROJECT_DIR, PROJECT_NAME)
    Git submodule实战
    Charles抓Https的包
    Vue-Quill-Editor 富文本编辑器的使用
    vue计算属性无法监听到数组内部变化
    移动端键盘弹起导致底部按钮上浮解决方案
    js中数组删除 splice和delete的区别,以及delete的使用
    js实现复制input的value到剪切板
    treetable
    vue中状态管理vuex的使用分享
  • 原文地址:https://www.cnblogs.com/-maji/p/7501698.html
Copyright © 2011-2022 走看看