Latest web development tutorials

JSP-Tags

Benutzerdefinierte Beschriftungen sind benutzerdefinierte JSP-Sprachelemente. Wenn die JSP-Seite enthält, wird ein eigenes Tag zu Servlet umgewandelt werden, Markierungsumsetztabelle für das Objekt ein Tag-Handler-Operationen genannt, dass bei Web-Container-Servlet-Aufruf diese Operationen ausgeführt.

JSP-Tag-Erweiterung ermöglicht es Ihnen, ein neues Label zu erstellen und kann direkt in eine JSP-Seite eingefügt werden. JSP 2.0-Spezifikation eingeführt Einfache Tag Handlers diese benutzerdefinierten Tags zu schreiben.

Sie können SimpleTagSupport Klasse erben und die doTag () Methode überschreiben, eine einfache benutzerdefinierte Etiketten zu entwickeln.


Erstellen Sie ein "Hallo" label

Als nächstes wollen wir <ex: Hallo> genannt ein eigenes Label zu erstellen, Tag-Format:

<ex:Hello />

Um eine benutzerdefinierte JSP-Tags zu erstellen, müssen Sie zuerst einen Labeldeal mit Java-Klassen erstellen. Also, lassen Sie uns einen HelloTag Klasse erstellen, wie folgt:

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

Der folgende Code die doTag () Methode überschreibt, die verwendete Methode getJspContext () -Methode das aktuelle JspContext-Objekt zu erhalten, und "Hallo Eigenes Tag!" Ist zu JspWriter Objekt übergeben.

Füllen Sie bitte die oben genannten Klassen, und kopieren Sie sie in die Umgebungsvariable CLASSPATH-Verzeichnis. Schließlich erstellen Sie das folgende Tag-Bibliothek: <Tomcat Installationsverzeichnis> 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>

Als nächstes können wir die Hallo-Tag in einer JSP-Datei:

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

Das obige Programm Ausgabe lautet:

Hello Custom Tag!

Registerkarte Zugriff Körper

Sie können wie die gleiche Standard-Tag-Bibliothek den Nachrichteninhalt in dem Etikett enthält. Wie wir in Hallo enthalten Inhalt wollen wir Brauch Format wie folgt:

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

Wir können den Tag-Handler-Klasse-Datei zu ändern, wie folgt:

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

}

Als nächstes müssen wir die TLD-Datei wie folgt zu ändern:

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

Nun können wir das modifizierte Label in der JSP zu verwenden, wie folgt:

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

Das obige Programm ausgegeben wird, wie folgt:

This is message body

Benutzerdefinierte Tag-Attribute

Sie können benutzerdefinierte Kriterien in verschiedenen Eigenschaften, setzen Sie die Eigenschaft zu erhalten, um den Wert des benutzerdefinierten Tags Klasse müssen Setter-Methode implementieren, sind die JavaBean Setter-Methoden wie folgt:

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

}

Name der Eigenschaft ist "message", so der Setter ist die setMessage (). Nun wollen wir die TLD-Datei verwenden <Attribut> Element diese Eigenschaft hinzuzufügen:

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

Jetzt können wir Nachrichteneigenschaften in der JSP-Datei zu verwenden, wie unten dargestellt:

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

Beispiele für die obigen Daten ausgegeben werden:

This is custom tag

Sie können auch die folgenden Eigenschaften umfassen:

Immobilien Beschreibung
Name Legen Sie den Namen der Eigenschaft. Jeder Tag ist der Attributname muss eindeutig sein.
erforderlich wenn auf false gesetzt optional Gibt an, ob das Attribut erforderlich oder optional ist.
rtexprvalue Wenn Sie die Anweisung Ausdruck ausführen, sind Tag-Attribute gültig.
Typ Definieren Sie die Java-Klasse Typ der Eigenschaft. Die Standardeinstellung ist alsString angegeben
Beschreibung Beschreibung
Fragment Wenn Sie die Eigenschaft deklarieren, wird der Wert der Eigenschaft alsJspFragment behandelt werden.

Das sind die Attribute mit dem angegebenen Instanz zugeordnet:

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

Wenn Sie zwei Eigenschaften verwenden, TLD-Datei wie folgt ändern:

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