Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

วิธีสร้าง custom tag ใน JSP ที่รับ attribute จากหน้า JSP เรียกใช้

เพื่อให้ custom tag รับค่า attribute ได้ ให้สร้าง setter method ใน tag handler class (คล้าย JavaBean) และประกาศ attribute ใน TLD

1. Tag Handler Class (HelloTag.java)

package com.example;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class HelloTag extends SimpleTagSupport {
    private String message;

    // Setter สำหรับ attribute "message"
    public void setMessage(String msg) {
        this.message = msg;
    }

    public void doTag() throws JspException, IOException {
        JspWriter out = getJspContext().getOut();
        if (message != null) {
            out.println(message);  // ใช้ค่าจาก attribute
        } else {
            // ใช้ค่าจาก body content
            StringWriter sw = new StringWriter();
            getJspBody().invoke(sw);
            out.println(sw.toString());
        }
    }
}

2. ไฟล์ TLD (custom.tld)

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>Example TLD</short-name>
    <tag>
        <name>Hello</name>
        <tag-class>com.example.HelloTag</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <name>message</name>
        </attribute>
    </tag>
</taglib>

3. การใช้งานใน JSP

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld" %>
<html>
<head><title>Custom Tag ด้วย Attribute</title></head>
<body>
    <ex:Hello message="นี่คือ custom tag ที่รับ attribute" />
</body>
</html>

ผลลัพธ์

นี่คือ custom tag ที่รับ attribute

จุดสำคัญ

  • ชื่อ attribute ใน TLD (message) ต้องตรงกับ setter method (setMessage)
  • 命名 convention: attribute ชื่อ xxx → setter ชื่อ setXxx (JavaBean pattern)
  • สามารถมี attribute หลายตัวได้ โดยเพิ่ม <attribute> ใน TLD และ setter ใน class