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:
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;
}
}
package
com.me.jsp.mytag;
import javax.servlet.jsp.JspWriter;
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:
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>
<%@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:
- Mantenimiento y modificación del código más simple.
- 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.
- Página JSP más legible, ya que simplemente aparecerá la etiqueta.
Comentarios
Publicar un comentario