แท็กแบบกำหนดเองคือองค์ประกอบภาษา JSP ที่ผู้ใช้กำหนด เมื่อเพจ JSP มีแท็กแบบกำหนดเองที่ถูกแปลงเป็นเซิร์ฟเล็ต แท็กจะถูกแปลงเป็นการดำเนินการบนออบเจ็กต์ที่เรียกว่าตัวจัดการแท็ก ซึ่งเป็นสิ่งที่เว็บคอนเทนเนอร์เรียกใช้เมื่อเซิร์ฟเล็ตถูกเรียกใช้งาน
ส่วนขยายแท็ก JSP ช่วยให้คุณสร้างแท็กใหม่และแทรกลงในเพจ JSP ได้โดยตรง Simple Tag Handlers ถูกนำมาใช้ในข้อกำหนด JSP 2.0 เพื่อเขียนแท็กที่กำหนดเองเหล่านี้
คุณสามารถสืบทอดคลาส SimpleTagSupport และแทนที่เมธอด doTag() เพื่อพัฒนาแท็กที่กำหนดเองที่ง่ายที่สุด
ต่อไป เราต้องการสร้างแท็กที่กำหนดเองชื่อ <ex:Hello> โดยมีรูปแบบดังต่อไปนี้:
<เช่น:สวัสดี />
เมื่อต้องการสร้างแท็ก JSP แบบกำหนดเอง คุณต้องสร้างคลาส Java ที่จัดการแท็กก่อน ดังนั้นให้เราสร้างคลาส HelloTag ดังนี้:
แพคเกจ com.tutorialspoint;นำเข้า javax.servlet.jsp.tagext.*;นำเข้า javax.servlet.jsp.*;นำเข้า java.io.*;คลาสสาธารณะ HelloTag ขยาย SimpleTagSupport { โมฆะสาธารณะ doTag() พ่น JspException, IOException { JspWriter ออก = getJspContext().getOut(); out.println("Hello Custom Tag!" }}
โค้ดต่อไปนี้จะเขียนเมธอด doTag() ใหม่ ซึ่งใช้เมธอด getJspContext() เพื่อรับอ็อบเจ็กต์ JspContext ปัจจุบัน และส่งผ่าน "Hello Custom Tag!" ไปยังอ็อบเจ็กต์ JspWriter
คอมไพล์คลาสข้างต้นและคัดลอกไปยังไดเร็กทอรี CLASSPATH ของตัวแปรสภาพแวดล้อม สุดท้าย ให้สร้างไลบรารีแท็กต่อไปนี้: <ไดเรกทอรีการติดตั้ง Tomcat> webappsROOTWEB-INFcustom.tld
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>ตัวอย่าง TLD</short-name> <tag> <name>สวัสดี</name > <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>ว่างเปล่า</body-content> </tag></taglib>
ต่อไปเราสามารถใช้แท็ก Hello ในไฟล์ JSP:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>ตัวอย่างแท็กที่กำหนดเอง</title> </head> <body> <ex:Hello /> </body></html>
ผลลัพธ์ของโปรแกรมข้างต้นคือ:
สวัสดีแท็กที่กำหนดเอง!
คุณสามารถรวมเนื้อหาข้อความในแท็กได้เช่นเดียวกับไลบรารีแท็กมาตรฐาน หากเราต้องการรวมเนื้อหาไว้ใน Hello ที่เรากำหนดเอง รูปแบบจะเป็นดังนี้:
<ex:Hello> นี่คือเนื้อหาข้อความ</ex:Hello>
เราสามารถแก้ไขไฟล์คลาสการประมวลผลฉลากได้โดยมีโค้ดดังต่อไปนี้:
แพ็คเกจ com.tutorialspoint;นำเข้า javax.servlet.jsp.tagext.*;นำเข้า javax.servlet.jsp.*;นำเข้า java.io.*;คลาสสาธารณะ HelloTag ขยาย SimpleTagSupport { StringWriter sw = new StringWriter(); ) พ่น JspException, IOException { getJspBody().inurge(sw); getJspContext().getOut().println(sw.toString());
ต่อไปเราต้องแก้ไขไฟล์ TLD ดังนี้:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>ตัวอย่าง TLD ที่มีเนื้อหา</short-name> <tag> <name>สวัสดี< / ชื่อ> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>scriptless</body-content> </tag></taglib>
ตอนนี้เราสามารถใช้แท็กที่ถูกแก้ไขใน JSP ดังที่แสดงด้านล่าง:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>ตัวอย่างแท็กที่กำหนดเอง</title> </head> <body> <ex:Hello > นี่คือเนื้อหาข้อความ </ex:Hello> </body></html>
ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้:
นี่คือเนื้อหาข้อความ
คุณสามารถตั้งค่าแอ็ตทริบิวต์ต่างๆ ในมาตรฐานที่กำหนดเองได้ ในการรับแอ็ตทริบิวต์ คลาสแท็กที่กำหนดเองต้องใช้เมธอด setter ดังนี้
แพคเกจ com.tutorialspoint;นำเข้า javax.servlet.jsp.tagext.*;นำเข้า javax.servlet.jsp.*;นำเข้า java.io.*;คลาสสาธารณะ HelloTag ขยาย SimpleTagSupport { ข้อความสตริงส่วนตัว setMessage สาธารณะโมฆะ (ข้อความสตริง) { this.message = msg; } StringWriter sw = new StringWriter() พ่นสาธารณะเป็นโมฆะ JspException, IOException { if (message != null) { /* ใช้ข้อความจากแอตทริบิวต์ */ JspWriter out = getJspContext().getOut(); out.println( message ); else { /* ใช้ข้อความจาก เนื้อหา */ getJspBody().inrigg(sw); getJspContext().getOut().println(sw.toString() } -
ชื่อของคุณสมบัติคือ "ข้อความ" ดังนั้นเมธอดตัวตั้งค่าคือ setMessage() ตอนนี้ให้เราเพิ่มแอตทริบิวต์นี้ในองค์ประกอบ <attribute> ที่ใช้ในไฟล์ TLD:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>ตัวอย่าง TLD ที่มีเนื้อหา</short-name> <tag> <name>สวัสดี< /name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>ข้อความ</name> </attribute> </tag></taglib>
ตอนนี้เราสามารถใช้แอตทริบิวต์ข้อความในไฟล์ JSP ได้ดังนี้:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>ตัวอย่างแท็กที่กำหนดเอง</title> </head> <body> <ex:Hello message="นี่คือแท็กที่กำหนดเอง" /> </body></html>
ผลลัพธ์ของข้อมูลตัวอย่างข้างต้นคือ:
นี่คือแท็กที่กำหนดเอง
คุณยังสามารถรวมแอตทริบิวต์ต่อไปนี้:
คุณสมบัติ | อธิบาย |
---|---|
ชื่อ | กำหนดชื่อของแอตทริบิวต์ ชื่อแอตทริบิวต์จะต้องไม่ซ้ำกันสำหรับแต่ละแท็ก |
ที่จำเป็น | ระบุว่าแอตทริบิวต์จำเป็นหรือเป็นทางเลือก หากตั้งค่าเป็นเท็จ จะเป็นทางเลือก |
ค่า rtexpr | ประกาศว่าแอตทริบิวต์ label ถูกต้องหรือไม่เมื่อรันนิพจน์ |
พิมพ์ | ประเภทคลาส Java ที่กำหนดคุณสมบัตินี้ ค่าเริ่มต้นระบุเป็น สตริง |
คำอธิบาย | ข้อมูลคำอธิบาย |
ส่วน | หากมีการประกาศแอ็ตทริบิวต์นี้ ค่าแอ็ตทริบิวต์จะถือเป็น JspFragment |
ต่อไปนี้เป็นตัวอย่างของการระบุคุณสมบัติที่เกี่ยวข้อง:
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute>.. ...
หากคุณใช้ทั้งสองแอ็ตทริบิวต์ ให้แก้ไขไฟล์ TLD ดังต่อไปนี้:
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute > <name>attribute_name2</name> <required>true</required> <type>java.util.Date</type> </attribute>.....