自定义标签

JSTL语法使用时,需要导入jstl.1.2包,通过引用包中的标签实现具体的语法。可以仿照其中的标签自定义一些特殊功能的标签,例如定义输出系统时间的标签。

1、创建tld文件,文件名自己定义尽量简洁,文件以tld结尾,例如:k.tld



<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">

  <description>My tag librarydescription>
  <display-name>My JSTL coredisplay-name>
  <tlib-version>3.2tlib-version>
  
  <short-name>kshort-name>
  
  <uri>/my-taguri>
   
   <tag>
    <description>标签描述description>
    <name>sysdatename>
    
    <tag-class>web.SysDateTagtag-class>
    
    <body-content>emptybody-content>
    <attribute>
        <description>属性格式>description>
        <name>formatname>
        
        <required>truerequired>
        
        <rtexprvalue>truertexprvalue>
    attribute>
   tag>

taglib>

2、创建类

package web;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class SysDateTag extends SimpleTagSupport {
    //给方法传入参数,该变量与标签里面的属性名一致
    private String format;


    public String getFormat() {
        return format;
    }


    public void setFormat(String format) {
        this.format = format;
    }


    @Override
    public void doTag() throws JspException, IOException {
        Date date=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat(format);
        String time=sdf.format(date);
//      输出时间,该方法声明返回值类型是JspContext,
//      而实现方法时的实际类型是PageContext,PageContext extends JspContext
        PageContext ctx=(PageContext)getJspContext();

        JspWriter out=ctx.getOut();
        out.println(time);
//      此处不能关闭流,因为其他标签也要使用,Tomcat会自动关闭

    }


}

3、写jsp文件

<%@ page pageEncoding="utf-8" %>

<%@taglib uri="/my-tag" prefix="k" %>

<html>
<head>
    <meta charset="utf-8">
    <title>自定义标签输出当前时间title>
head>
<body>
    <h1>自定义标签输出当前时间h1>
    <p>
    
        <k:sysdate format="yyyy-MM-dd HH:mm:ss"/>

    p>
html>

你可能感兴趣的:(jsp)