เพื่อให้ 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