Latest web development tutorials

balises personnalisées JSP

étiquettes personnalisées sont JSP éléments de langage définis par l'utilisateur. Lorsque la page JSP contient une balise personnalisée sera convertie en servlet, conversion d'étiquette pour l'objet est appelé les opérations d'un gestionnaire d'étiquette qui, lorsqu'il est exécuté conteneur Web servlet appel de ces opérations.

tag 'extension JSP vous permet de créer une nouvelle étiquette et peut être inséré directement dans une page JSP. JSP spécification 2.0 introduit Handlers Tag simples pour écrire ces balises personnalisées.

Vous pouvez hériter classe SimpleTagSupport et remplacer la méthode doTag () pour développer un simple des étiquettes personnalisées.


Créer une étiquette "Bonjour"

Ensuite, nous voulons créer une étiquette personnalisée appelée <ex: Bonjour>, le format de tag:

<ex:Hello />

Pour créer un balises JSP, vous devez d'abord créer un accord de l'étiquette avec les classes Java. Donc, nous allons créer une classe de HelloTag, comme suit:

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

Le code suivant remplace la méthode doTag (), la méthode utilisée méthode getJspContext () pour obtenir l'objet courant JspContext, et "Tag Bonjour personnalisé!" Est passé à l'objet JspWriter.

Compiler les classes ci-dessus, et le copier dans la variable répertoire CLASSPATH de l'environnement. Enfin, créer la bibliothèque suivante tag: <répertoire d'installation 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>

Ensuite, nous pouvons utiliser la balise Bonjour dans un fichier JSP:

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

La sortie du programme ci-dessus est:

Hello Custom Tag!

corps onglet Accès

Vous pouvez être comme la même bibliothèque de balises standard contient le contenu du message dans l'étiquette. Comme nous voulons inclure le contenu dans Bonjour, nous coutume format est le suivant:

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

Nous pouvons modifier le fichier de classe gestionnaire de balises, comme suit:

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

}

Ensuite, nous devons modifier le fichier TLD comme suit:

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

Maintenant, nous pouvons utiliser l'étiquette modifiée dans le JSP, comme suit:

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

La sortie du programme ci-dessus est la suivante:

This is message body

marque personnalisée attributs

Vous pouvez définir des critères personnalisés dans différentes propriétés, pour recevoir la propriété, la valeur de la balise classe personnalisée doit implémenter la méthode setter, les méthodes JavaBean setter sont les suivantes:

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

}

Nom de la propriété est "message", de sorte que le compositeur est le setMessage (). Maintenant, nous allons utiliser le fichier TLD <attribut> pour ajouter cette propriété:

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

Maintenant, nous pouvons utiliser les propriétés des messages dans le fichier JSP, comme indiqué ci-dessous:

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

Des exemples de ces données de sortie est:

This is custom tag

Vous pouvez également inclure les propriétés suivantes:

propriété description
nom Définir le nom de la propriété. Chaque balise est le nom d'attribut doit être unique.
requis Indique si l'attribut est obligatoire ou facultative, si la valeur false en option.
rtexprvalue Lorsque vous exécutez l'expression des états, attributs de balise sont valides.
type Définir le type de classe Java de la propriété. La valeur par défaut est spécifié sous forme dechaîne
description description
fragment Si vous déclarez la propriété, la valeur de la propriété sera traitée comme unJspFragment.

Ce sont là les attributs associés à l'instance spécifiée:

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

Si vous utilisez deux propriétés, modifier le fichier TLD comme suit:

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