Latest web development tutorials

etiquetas JSP

Las etiquetas personalizadas son elementos del lenguaje JSP definidos por el usuario. Cuando la página JSP contiene una etiqueta personalizada se convertirá en servlet, conversión de etiquetas para el objeto se llama las operaciones de un controlador de etiqueta que, al ejecutarse la llamada servlet contenedor Web esas operaciones.

extensión de etiquetas JSP le permite crear una nueva etiqueta y se puede insertar directamente en una página JSP. JSP especificación 2.0 introdujo controladores de etiquetas simples para escribir estas etiquetas personalizadas.

Se puede heredar la clase SimpleTagSupport y reemplazar el método doTag () para desarrollar unas simples etiquetas personalizadas.


Crear una etiqueta "Hola"

A continuación, queremos crear una etiqueta personalizada llamada <ex: Hola>, el formato de la etiqueta:

<ex:Hello />

Para crear una costumbre etiquetas JSP, primero debe crear una oferta de etiqueta con las clases de Java. Por lo tanto, vamos a crear una clase HelloTag, de la siguiente manera:

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

El código siguiente sustituye el método doTag (), el método utiliza el método de getJspContext () para obtener la corriente objeto JspContext, y "Hola etiqueta de encargo!" Se pasa al objeto JspWriter.

Compilar las clases anteriores, y copiarlo en el directorio de la variable de entorno CLASSPATH. Por último, cree la siguiente biblioteca de etiquetas: <directorio de instalación de 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>

A continuación, podemos utilizar la etiqueta Hola en un archivo JSP:

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

La salida del programa anterior es:

Hello Custom Tag!

cuerpo de lengüeta de acceso

Puede ser como la misma biblioteca de etiquetas estándar contiene el contenido del mensaje en la etiqueta. Como queremos incluir contenido en Hola, podemos aduana formato es el siguiente:

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

Podemos modificar el archivo de clase de controlador de etiquetas, de la siguiente manera:

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

}

A continuación tenemos que modificar el archivo TLD de la siguiente manera:

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

Ahora podemos usar la etiqueta modificada en el JSP, de la siguiente manera:

<%@ 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 salida del programa anterior es como sigue:

This is message body

atributos de etiquetas personalizadas

Puede establecer los criterios personalizados en diversas propiedades, para recibir la propiedad, el valor de la clase de etiquetas personalizadas deben implementar un método seleccionador, los métodos setter JavaBean son los siguientes:

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

}

Nombre de la propiedad es "mensaje", por lo que el colocador es el setMessage (). Ahora vamos a utilizar el archivo TLD <atributo> para añadir esta propiedad:

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

Ahora podemos usar las propiedades del mensaje en el archivo JSP, como se muestra a continuación:

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

Los ejemplos de los datos anteriores de salida es:

This is custom tag

También puede incluir las siguientes propiedades:

propiedad descripción
nombre Definir el nombre de la propiedad. Cada etiqueta es el nombre del atributo debe ser único.
necesario Especifica si el atributo es necesario u opcional, si se establece en false opcional.
rtexprvalue Cuando se ejecuta la expresión declaración, atributos de etiqueta son válidos.
tipo Definir el tipo de clase de Java de la propiedad. El valor por defecto se especifica comocuerdas
descripción descripción
fragmento Si se declara la propiedad, el valor de la propiedad será tratada como unaJspFragment.

Estos son los atributos asociados a la instancia especificada:

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

Si utiliza dos propiedades, modificar el archivo TLD de la siguiente manera:

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