Custom Tags en J2EE con NetBeans

Febrero 25th, 2010 No Comments »

La creación de Custom Tags (etiquetas personalizadas) en Java EE con NetBeans es sumamente fácil. Para ello debemos crear un nuevo proyecto desde Archivo -> Nuevo Proyecto y luego seleccionamos la opción Java Web -> Web Application. A continuación especificamos los datos relativos a la ubicación del proyecto en disco y luego sobre el servidor de aplicaciones a utilizar (en nuestro caso Glassfish).

A continuación procedemos a crear un archivo Tag Library Descriptor, que vendría a ser la especificación de las etiquetas que contendrá nuestra librería. Allí iremos agregando las nuevas relaciones a etiquetas que vayamos creado, de forma tal que luego podamos importar este archivo TLD a nuestro JSP para poder comenzar a utilizar sus tags. Para crearlo simplemente seleccionamos Archivo -> Nuevo Archivo y luego la opción Tag Library Descriptor dentro de la carpeta Web. A continación le asignamos un nombre (como ejemplo usaremos funcionesMatematicas) y seleccionamos como localización nuestra carpeta WEB-INF, creada automáticamente por el NetBeans al iniciar el Proyecto.

A continuación veremos creado un archivo como el siguiente:

Archivo: funcionesMatematicas.tld

 
  1.0
  funcionesmatematicas
  /WEB-INF/funcionesMatematicas
  <!-- A validator verifies that the tags are used correctly at JSP
         translation time. Validator entries look like this:
      <validator>
          <validator-class>com.mycompany.TagLibValidator</validator-class>
          <init-param>
<span -name class="mceItemParam"></span>parameter</param-name>
<span -value class="mceItemParam"></span>value</param-value>
	  </init-param>
      </validator>
   -->
  <!-- A tag library can register Servlet Context event listeners in
        case it needs to react to such events. Listener entries look
        like this:
	<listener>
	<listener-class>com.mycompany.TagLibListener</listener-class>
     </listener>
   -->
 
    Suma
    misTags.Suma
    scriptless
 
      a
      true
      true
      int
 
      b
      true
      true
      int

Que no es nada más y nada menos que un archivo XML en el que se describen las características de la librería de etiquetas personalizadas. Dentro de este archivo, dentro de la etiqueta taglib, es que especificaremos nuestras custom tags para vincularlas a métodos de clases que extiendan a Tag (veremos esto a continuación).

Dentro de los paquetes fuente (source packages) creamos uno nuevo llamado misTags. Y dentro de este paquete creamos un nuevo archivo del tipo Tag Handler. A continuación, NetBeans nos solicitará los datos de la etiqueta personalizada a crear, tales como el nombre, la descripción y la clase Tag Support a la que extenderá. De esta selección dependerá la cantidad de métodos que tengamos que redefinir para que nuestra tag funcione, además del control que obtendremos en cuanto a libertad de modificación. Para simplificarlo seleccionamos SimpleTagSupport (por defecto).

En nuestro caso crearemos la etiqueta suma, cuyo objetivo será retornar la suma entre dos números enteros pasados por parámetro. Luego seleccionamos el archivo TLD (descriptor de etiquetas) al cual se vinculará la etiqueta actual, en nuestro caso será funcionesMatematicas.tld. Para finalizar especificaremos los parámetros que utilizará nuestra etiqueta, usando el botón New … en la parte inferior derecha del formulario.

Agregamos dos parámetros, a y b del tipo int, ambos requeridos y seleccionamos Terminar. De esta forma obtendremos una clase Java con un contenido similar al siguiente:

Archivo: Suma.java

package misTags;
 
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
 
/**
 *
 * @author Joaquin L. Robles
 */
public class Suma extends SimpleTagSupport {
    private int a;
    private int b;
 
    /**
     * 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 {
            JspFragment f = getJspBody();
            if (f != null) f.invoke(out);
 
            // NUESTRO CODIGO ACA
 
        } catch (java.io.IOException ex) {
            throw new JspException("Error in Suma tag", ex);
        }
    }
 
    public void setA(int a) {
        this.a = a;
    }
 
    public void setB(int b) {
        this.b = b;
    }
 
}
Powered By Wordpress - Theme Provided By Wordpress Theme - No Credit Auto Loan