Latest web development tutorials

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>
.....