JSP. 19 Crear librería de etiquetas


Primero debemos crear un Tag Library Descriptor. Este archivo contendrá una descripción de las etiquetas que crearemos en la librería y los atributos que cada etiqueta posee.
New File → Categories: Web, File Types: Tag Library Descriptor.

 
Click Next.
  • TLD Name: nombre de nuestro tag descriptor.
  • Folder: donde guardaremos el archivo tag descriptor, debe colocarse en la carpeta WEB-INF o en una subcarpeta de esta.
  • URI: es la url a cargar en las páginas JSP que hagan uso de este tag descriptor.
  • Prefix: el prefijo con el que llamaremos a las etiquetas que contendrá tag descriptor, en la página JSP se puede especificar uno distinto sin problemas.

 
Click Finish.

Segundo debemos crear un Tag Handler por cada etiqueta que deseemos crear en nuestra librería.
New File → Categories: Web, File Types: Tag Handler.


Click Next.
  • Class Name: nombre de la clase a crear.
  • Package: paquete donde se creará la clase.
  • Tag Support Class to Extend: SimpleTagSupport (J2EE 1.4). Esto hará que la clase herede de SimpleTagSupport y nos simplifique el trabajo.
 
Click Next.
  • TLD File: nuestro archivo tag descriptor, de esta forma se creará una entrada en el archivo tag descriptor por cada Tag Handler que creemos que es identificada como una etiqueta a usar.
  • Tag Name: nombre de la etiqueta a crear.
  • Body Content: scriptless.
  • Attributes: por cada atributo que nuestra etiqueta posea pulsaremos el botón New para crearlo. Cada atributo posee un nombre, un tipo y si es requerido o no. Se pueden crear tantos como necesitemos.

Click Finish.

Si abrimos el Tag Handler creado ToUpper y lo modificamos para añadirle su funcionalidad:

package com.me.jsp.mytag;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class ToUpper extends SimpleTagSupport {
   
private String cad;

   
/**
     * Called by the container to invoke this tag. The implementation of
     * this method is provided by the tag library developer, and handles
     * all tag processing, body iteration, etc.
     */
    @Override
   
public void doTag() throws JspException {
        JspWriter out = getJspContext().getOut();

       
try {
       
// TODO: insert code to write html before writing the body content
            JspFragment f = getJspBody();
           
if (f != null) {
                f.invoke(out);
            }
           
// Nuestro código
           
// Convertimos la cadena en mayúsculas y la escribimos
            out.print(
cad.toUpperCase());

           
// TODO: insert code to write html after writing the body content.

        }
catch (java.io.IOException ex) {
           
throw new JspException("Error in ToUpper tag", ex);
        }
    }

   
public void setCad(String cad) {
       
this.cad = cad;
    }
}


Tercero solamente queda hacer uso del tag library creado en una página JSP. Para hacer uso en una página JSP debemos cargar el taglib mediante:
<%@taglib prefix="my" uri="/WEB-INF/mytag" %>

El atributo prefix es el que nosotros deseemos y la uri la definimos anteriormente.
Netbeans nos ayuda a la hora de insertar el taglib pulsando Ctrl+espacio, y además cuando nos colocamos en el campo uri="" haciendo Ctrl+espacio dentro de las comillas dobles nos muestra una lista de taglib a cargar, donde aparece la nuestra. Finalmente haciendo uso del prefix definido por nosotros en la página JSP utilizamos la etiqueta deseada.

Ejemplo:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="my" uri="/WEB-INF/mytag" %>
<!DOCTYPE html>
<html>
    
<head>
        
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        
<title>JSP Page</title>
    
</head>
    
<body>
        
<h1>Mi Biblioteca de etiquetas</h1>
        
<form action="index.jsp" method="POST">
            
<input type="submit" value="Volver a Menu" />
        
</form><br/>
      
        
<my:ToUpper cad="hola" />
        
<br />
        
<my:ToLower cad="HOLA" />
        
<br />
        
<my:ReplaceString cad="Hola a todos y todas." regex="a" replacement="b" />

    
</body>
</html>


De esta forma podemos transformar scripts, trozos de código repetitivos o código que ocupa muchas lineas en una simple etiqueta.
Algunos de los beneficios son:
  1. Encapsulación de determinados comportamientos en una etiqueta.
  2. Mantenimiento y modificación del código más simple.
  3. Reutilización de código. Una vez creada puede utilizarse en cualquier proyecto, simplemente hace falta copiar el tag descriptor y las clases Java que implementan su funcionamiento. Seguro existe una forma de unir todo y cargarlo como una librería en nuestra aplicación.
  4. Página JSP más legible, ya que simplemente aparecerá la etiqueta.





Comentarios

Entradas populares de este blog

Java. Texto de colores en la consola

javax.swing.JPasswordField

javax.swing.JList