Java學習路線-55:自定義JSP標籤

第 10 章 : 自定義標籤

編寫步驟:

  1. 標籤處理類
  2. 編寫 tld 文件
  3. taglib 導入 tld 文件

依賴

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>

定義無內容標籤

package com.pengshiyu.taglibs;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class HelloTag extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        this.getJspContext().getOut().println("hello");
    }
}

聲明

<?xml version="1.0" encoding="utf-8"?>

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>Example TLD with Body</short-name>

    <tag>
        <name>Hello</name>
        <tag-class>com.pengshiyu.taglibs.HelloTag</tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>

引入聲明文件並使用標籤

<%@ page
    language="java"
    contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    %>

<%@ taglib
    prefix="ext"
    uri="WEB-INF/custom.tld"
    %>

<ext:Hello />

定義有內容標籤

package com.pengshiyu.taglibs;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class HelloTag extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        JspWriter out = this.getJspContext().getOut();
        out.write("******");
        this.getJspBody().invoke(out);
        out.write("******");
    }
}

<%@ page
    language="java"
    contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    %>

<%@ taglib
    prefix="ext"
    uri="WEB-INF/custom.tld"
    %>

<ext:Hello>
你好
</ext:Hello>

輸出

****** 你好 ******

不再執行標籤下面的內容

package com.pengshiyu.taglibs;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class HelloTag extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        this.getJspContext().getOut().write("以下內容不顯示");
        throw new SkipPageException();
    }
}

帶有屬性的標籤

標籤類

package com.pengshiyu.taglibs;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class HelloTag extends SimpleTagSupport {


    private String name = "";

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void doTag() throws JspException, IOException {
        this.getJspContext().getOut().write(this.name);

    }
}

tld 配置

<tag>
    <name>Hello</name>
    <tag-class>com.pengshiyu.taglibs.HelloTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
<!--            屬性名稱-->
        <name>name</name>
<!--            是否可選-->
        <required>true</required>
<!--            支持表達式-->
        <rtexprvalue>true</rtexprvalue>
    </attribute>
</tag>

使用

<ext:Hello name="Tom"></ext:Hello>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章