Latest web development tutorials

JSP tag personalizzati

Le etichette personalizzate sono elementi di linguaggio JSP definiti dall'utente. Quando la pagina JSP contiene un tag personalizzato verrà convertito in servlet, la conversione etichetta per l'oggetto si chiama operazioni di un tag handler che, una volta eseguito chiamata contenitore Web servlet tali operazioni.

JSP estensione tag consente di creare una nuova etichetta e può essere inserito direttamente in una pagina JSP. JSP specifica 2.0 ha introdotto gestori Tag semplici per scrivere questi tag personalizzati.

È possibile ereditare classe SimpleTagSupport e sovrascrivere il metodo doTag () per sviluppare un semplice etichette personalizzate.


Creare un'etichetta "Ciao"

Quindi, vogliamo creare un'etichetta personalizzata denominata <ex: Ciao>, formato tag:

<ex:Hello />

Per creare una tag JSP, è necessario creare prima un accordo con un'etichetta classi Java. Quindi, creiamo una classe HelloTag, come segue:

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!");
  }
}

Il seguente codice sovrascrive il metodo doTag (), il metodo utilizzato metodo di getJspContext () per ottenere l'oggetto JspContext corrente, e "Tag Ciao personalizzato!" È passato a oggetto JspWriter.

Compilare le classi di cui sopra, e copiarlo nella directory CLASSPATH variabile d'ambiente. Infine, creare la seguente libreria di tag: <directory di installazione di 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>

Quindi, possiamo usare il tag Ciao in un file JSP:

<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
  <head>
    <title>A sample custom tag</title>
  </head>
  <body>
    <ex:Hello/>
  </body>
</html>

L'output del programma di cui sopra è:

Hello Custom Tag!

corpo scheda Accesso

Si può essere come la stessa libreria di tag standard contiene il contenuto del messaggio nell'etichetta. Come vogliamo includere contenuti in Ciao, abbiamo personalizzato formato è il seguente:

<ex:Hello>
   This is message body
</ex:Hello>

Siamo in grado di modificare il file di classe tag handler, come segue:

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());
    }

}

Poi abbiamo bisogno di modificare il file TLD come segue:

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

Ora possiamo usare l'etichetta modificato nella JSP, come segue:

<%@ 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>

L'output del programma sopra è il seguente:

This is message body

attributi tag personalizzato

È possibile impostare criteri personalizzati in varie proprietà, di ricevere la proprietà, il valore della classe tag personalizzato deve implementare il metodo setter, i metodi JavaBean setter sono i seguenti:

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());
       }
   }

}

Nome della proprietà è "messaggio", in modo che il setter è il setMessage (). Ora cerchiamo di utilizzare il file TLD <attributo> elemento per aggiungere questa proprietà:

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

Ora siamo in grado di utilizzare le proprietà dei messaggi nel file JSP, come illustrato di seguito:

<%@ 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>

Esempi dei dati sopra uscita è:

This is custom tag

È inoltre possibile includere le seguenti proprietà:

proprietà descrizione
nome Definire il nome della proprietà. Ogni tag è il nome dell'attributo deve essere univoco.
richiesto Specifica se l'attributo è obbligatorio o facoltativo, se impostato su false opzionale.
rtexprvalue Quando si esegue l'espressione dichiarazione, gli attributi di tag sono validi.
tipo Definire il tipo di classe Java della proprietà. L'impostazione di default è specificato comestringa
descrizione descrizione
frammento Se si dichiara la proprietà, il valore della proprietà sarà trattata come unJspFragment.

Questi sono gli attributi associati con l'istanza specificata:

.....
    <attribute>
      <name>attribute_name</name>
      <required>false</required>
      <type>java.util.Date</type>
      <fragment>false</fragment>
    </attribute>
.....

Se si utilizzano due proprietà, modificare il file TLD come segue:

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