Title: Universidad Nacional de Colombia
1- Desarrollo de aplicaciones en Internet
- Etiquetas Personalizadas
2Por qué aparecieron las etiqueta personalizada s?
- Un Java bean es diseñado pensando en
reusabilidad, lo cual significa que el empleo de
un bean para la salida de etiquetas HTML
directamente no es recomendable.
3Ventajas de las etiqueta personalizada s
- Las etiquetas personalizadas poseen algunas
ventajas que no están presentes en los beans,
estas son - Tienen acceso a los objetos disponibles en las
páginas JSP - Pueden usar atributos constantemente
- A pesar de las anteriores ventajas de las
etiquetas personalizadas no debe pensarse en que
estas puedan reemplazar completamente a los Java
beans ni que el uso de estos en páginas JSP es
obsoleto.
4Etiquetas Personalizadas vs. JavaBeans
implementación
presentación
Etiquetas Personalizadas
JavaBeans
HTML y JSP
5Pasos para crear una Etiqueta Personalizada
- Crear el Archivo descriptor TLD
- Adicionar la Taglib en la JSP
- Definir el taglib en el Web.xml
- Crear la Clase java que maneja el Tag (Tag
Handler)
61. Archivo Descriptor de TLD
- Un archivo Tag Library Descriptor es un documento
que define una librería de etiquetas y sus tag. -
- lt?xml version"1.0" encoding"ISO-8859-1" ?gt
- lt!DOCTYPE taglib
- PUBLIC "-//Sun Microsystems, Inc.//DTD
JSP Tag Library 1.2//EN" - "http//java.sun.com/dtd/web-jsptaglibrary
_1_2.dtd"gt - lttaglibgt
- lttlibversiongt1.2lt/tlibversiongt
- ltjsp-versiongt1.2lt/jsp-versiongt
- ltshortnamegtlt/shortnamegt
- lttaggt
- ltnamegtmitaglt/namegt
- lttagclassgtco.edu.unal.dai.MiTaglt/tagclassgt
- lt/taggt
- lt/taglibgt
7Archivo Descriptor de TLD
- Un archivo TLD contiene el elemento raíz lttaglibgt
. Este elemento puede tener los siguientes
subelemetos - lttlibversiongt
- ltjspversiongt
- ltshortnamegt
- ltinfo gt
- lturigt
- lttaggt
- los elementos tlibversion, jspversion y
shortname son requeridos
8Sub-Elementos de taglib
- lttlibversiongt Especifica el número de la versión
de la librería de etiquetas con el siguiente
formato - (0-9) ("." 0-9)? ("." 0-9)? ("." 0-9)?
- ltjspversiongt Especifica el número de la versión
de JSP que soporte taglibs empleada - (0-9) ("." 0-9)? ("." 0-9)? ("." 0-9)?
- (por defecto 1.2)
- ltshortnamegt Especifica un nombre corto para la
librería de etiquetas - ltinfogt Información usada para propósitos de
documentación - lturigt Especifica el link a un recurso adicional
de documentación para la librería de etiquetas
9El elemento lttaggt
- lttaggt es el más importante en una librería de
etiquetas - Se puede especificar más de un elemento lttaggt en
el mismo archivo TLD - Este elemento especifica un etiqueta
personalizada en la librería de etiquetas - Este elemento puede tener los sub-elementos
- ltnamegt Identificador del Tag
- lttagclassgt Clase que va a procesar el Tag
- ltbodycontentgt Contenido del tag empty, JSP o
tagdependent - ltinfogt Información descriptiva
- ltattributegt Atributo del tag. name, required,
rtextprvalue
102. Adición del Taglib en la JSP
- Para usar un etiqueta personalizada en una
página JSP primero se debe usar una directiva de
que tiene la siguiente sintasix - lt_at_ taglib uriuri_Taglib" prefixprefijo" gt
- Con una directiva Taglib se puede usar un
etiqueta personalizada. - Con el siguiente formato si no tiene contenido en
el cuerpo - ltprefijoNombreTag/gt
- Con el siguiente formato si el tag tiene
contenido en el cuerpo - ltprefijoNombreTaggt ..cuerpo.. lt/prefijoNombreTag
gt
11Adición del Taglib en la JSP
- Se pueden pasar atributos a la clase que maneja
el tag por medio de los de los atributos en la
etiqueta personalizada - nombAtributovalor"
123. Definir el Taglib en el Web.xml
- lt?xml version"1.0" encoding"ISO-8859-1" ?gt
- ltweb-appgt
-
- lttaglibgt
- lttaglib-urigt/miTldlt/taglib-urigt
- lttaglib-locationgt/WEB-INF/archivo.tldlt/taglib-lo
cationgt - lt/taglibgt
- lt/web-appgt
134. Clase para el Manejo del Tag
- Se conoce como Tag Handler
- Clase java relacionada con una etiqueta
personalizada y se invoca cada vez que el
contenedor JSP encuentra la etiqueta
personalizada. - Implementa la interfaz Tag. Se deben implementar
los siguientes métodos - doStartTag
- doEndTag
- getParent
- setParent
- setPageContext
- release
14El ciclo de vida del Tag Handler
- El contenedor JSP obtiene una instancia del tag
handler o crea una nueva y llama al
setPageContext, pasando un objeto PageContext que
representa la página JSP donde se encuentra la
etiqueta personalizada - El setPageContext tiene la siguiente estructura
- public void setPageContext(PageContext
pageContext)
15El ciclo de vida del Tag Handler
- El contenedor JSP llama al método setParent
- public void setParent(Tag parent)
- El contenedor JSP establece todos los atributos
en las etiquetas personalizadas (si los hay) - El contenedor JSP llama al doStartTag , cuya
estructura es la siguiente - public int doStartTag() throws javax.servlet.jsp.J
spException
16El ciclo de vida del Tag Handler
- 5. Teniendo en cuenta el valor retornado por el
método doStartTag, el contenedor JSP llama al
método doEndTag - public int doEndTag() throws javax.servlet.jsp.Jsp
Exception - 6. El contenedor JSP llama al método release,
- public void release()
- 7. El contenedor JSP retorna la instancia del
tag handler para su uso futuro
17Interfaz Tag
18Interfaz IterationTag
- La interface IterationTag extiende de la
interface Tag - Adiciona un nuevo método llamado doAfterBody
- Adiciona la constante EVAL_BODY_AGAIN
- Se emplea para realizar Tag Handlers iterativos
19BodyContent y BodyTag
- Una etiqueta JSP puede tener contenido en el
cuerpo así como la siguiente - lt_at_ taglib uri"/miTld" prefix"x"gt
- ltxelTaggtThis is the body contentlt/xelTaggt
- Cuando se usan las interfaces Tag o IterationTag
no se puede manipular el contenido del cuerpo de
la etiqueta porque no se tiene acceso. - Si se quiere modificar el contenido del cuerpo de
una etiqueta personalizada se deben emplear la
interfaz BodyTag y la clase BodyContent del
paquete
20La Interfaz BodyTag
- La Interface BodyTag extiende de la interface
IterationTag. - Adiciona los métodos doInitBody y setBodyContent
- Adiciona las constantes EVAL_BODY_BUFFERED y
EVAL_BODY_TAG - public void setBodyContent(BodyContent
bodyContent) - public void doInitBody() throws
javax.servlet.jsp.JspException
21La clase BodyContent
- La clase BodyContent es una clase abstracta que
extiende de la clase javax.servlet.jsp.JspWriter - La clase BodyContent representa el contenido del
cuerpo de la etiqueta personalizada si lo hay. - Se obtiene el contenido del cuerpo de la etiqueta
personalizada del método setBodyContent en la
interfaz BodyTag.
22Las clases de soporte
- Aunque las interfaces Tag, IterationTag, and
BodyTag proporcionan muchas posibilidades para
escribir Tag Handlers, también poseen una
desventaja , se debe proveer implementación para
todos los métodos así no sean usados. - Para resolver este problema el paquete
javax.servlet.jsp.tagext suministra unas clases
soporte que implementan estas interfaces, estas
son - TagSupport
- BodyTagSupport
23La clase TagSupport
- La clase TagSupport implementa la interface
IterationTag y presenta la siguiente estructura - public class TagSupport implements
IterationTag, java.io.Serializable - La clase TagSupport está destinada a ser usada
como la clase base para los Tag Handlers
24La clase BodyTagSupport
- La clase BodyTagSupport implementa la interface
BodyTag y presenta la siguiente estructura - public class BodyTagSupport extends TagSupport
implements BodyTag - Esta clase tiene el propósito de ser una subclase
para los Tag Handlers que necesitan implementar
la interfaz BodyTag