tag kustom JSP
Kustom label yang ditetapkan pengguna JSP unsur bahasa. Ketika halaman JSP berisi tag kustom akan dikonversi ke servlet, konversi label untuk objek disebut operasi tag handler yang, ketika dieksekusi panggilan kontainer Web servlet operasi-operasi.
JSP tag ekstensi memungkinkan Anda untuk membuat label baru dan dapat dimasukkan langsung ke dalam halaman JSP. JSP 2,0 spesifikasi diperkenalkan Simple Tag Penangan menulis tag kustom.
Anda dapat mewarisi kelas SimpleTagSupport dan mengganti metode doTag () untuk mengembangkan label khusus sederhana.
Buat "Hello" label
Selanjutnya, kita ingin membuat label khusus yang disebut <ex: Hello>, Format tag:
<ex:Hello />
Untuk membuat custom JSP tag, Anda harus terlebih dahulu membuat kesepakatan label dengan kelas Java. Jadi, mari kita membuat kelas HelloTag, sebagai berikut:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!"); } }
Kode berikut menggantikan metode doTag (), metode yang digunakan metode getJspContext () untuk mendapatkan JspContext objek saat, dan "Hello Kustom Tag!" Apakah diteruskan ke JspWriter objek.
Mengkompilasi kelas atas, dan menyalinnya ke lingkungan direktori CLASSPATH variabel. Akhirnya, membuat tag perpustakaan berikut: <direktori instalasi Tomcat> webapps \ ROOT \ WEB-INF \ 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.w3big.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
Selanjutnya, kita dapat menggunakan tag Hello dalam file JSP:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello/> </body> </html>
Output program di atas adalah:
Hello Custom Tag!
tubuh tab akses
Anda bisa seperti standar perpustakaan tag sama mengandung isi pesan di label. Seperti yang kita ingin menyertakan konten dalam Halo, kami kustom format sebagai berikut:
<ex:Hello> This is message body </ex:Hello>
Kita dapat memodifikasi file kelas tag handler, sebagai berikut:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } }
Selanjutnya kita perlu memodifikasi file TLD sebagai berikut:
<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.w3big.HelloTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
Sekarang kita dapat menggunakan label diubah dalam JSP, sebagai berikut:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello> This is message body </ex:Hello> </body> </html>
Output program di atas adalah sebagai berikut:
This is message body
atribut tag kustom
Anda dapat menetapkan kriteria khusus di berbagai properti, untuk menerima properti, nilai adat tag kelas harus menerapkan metode setter, metode JavaBean setter adalah sebagai berikut:
package com.w3big; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class HelloTag extends SimpleTagSupport { private String message; public void setMessage(String msg) { this.message = msg; } StringWriter sw = new StringWriter(); public void doTag() throws JspException, IOException { if (message != null) { /* 从属性中使用消息 */ JspWriter out = getJspContext().getOut(); out.println( message ); } else { /* 从内容体中使用消息 */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } }
Nama properti adalah "pesan", sehingga setter adalah setMessage yang (). Sekarang mari kita gunakan file TLD <atribut> elemen untuk menambahkan properti ini:
<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.w3big.HelloTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute> </tag> </taglib>
Sekarang kita dapat menggunakan properti pesan dalam file JSP, seperti yang ditunjukkan di bawah ini:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%> <html> <head> <title>A sample custom tag</title> </head> <body> <ex:Hello message="This is custom tag" /> </body> </html>
Contoh data di atas output:
This is custom tag
Anda juga bisa memasukkan sifat sebagai berikut:
milik | deskripsi |
---|---|
nama | Mendefinisikan nama properti. Setiap tag adalah nama atribut harus unik. |
wajib | Menentukan apakah atribut diperlukan atau opsional, jika diatur ke false opsional. |
rtexprvalue | Ketika Anda menjalankan ekspresi pernyataan, atribut tag yang valid. |
jenis | Menentukan jenis Java kelas properti. default ditentukan sebagaiString |
deskripsi | deskripsi |
fragmen | Jika Anda menyatakan properti, nilai properti akan diperlakukan sebagaiJspFragment. |
Ini adalah atribut yang terkait dengan contoh yang ditentukan:
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute> .....
Jika Anda menggunakan dua sifat, memodifikasi file TLD sebagai berikut:
..... <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> .....