Академический Документы
Профессиональный Документы
Культура Документы
El Tutorial de Java EE 5
Anterior: Capítulo 7 de JavaServer Pages Standard Tag Library Siguiente: Capítulo 9 de secuencias de comandos en páginas JSP
son extensiones al lenguaje JSP. Algunos ejemplos de tareas que se pueden realizar mediante etiquetas personalizadas incluyen la operación en objetos implícitos, las formas de procesamiento de bases de datos, acceso y otros
servicios empresariales, tales como correo electrónico y directorios, y la aplicación de control de flujo. Las etiquetas personalizadas aumentan la productividad, ya que pueden ser reutilizados en más de una aplicación. Las etiquetas
personalizadas se distribuyen en una biblioteca de etiquetas, que define un conjunto de etiquetas personalizadas relacionados y contiene los objetos que implementan las etiquetas. El objeto que implementa una etiqueta personalizada
se llama un controlador de etiqueta. La tecnología JSP define dos tipos de controladores de etiquetas: simples y clásicos. controladores de etiquetas simples se pueden utilizar solamente para las etiquetas que no utilizan elementos de
guiones en valores de atributos o el cuerpo de la etiqueta. controladores de etiquetas clásicas se deben utilizar si se requieren elementos de guiones. controladores de etiquetas simples se tratan en este capítulo, y controladores de
Se puede escribir controladores de etiquetas simples que utilizan el lenguaje JSP o utilizando el lenguaje Java. Un archivo de etiqueta es un archivo de origen que contiene un fragmento reutilizable de código JSP que se traduce en un
simple controlador de etiqueta por el contenedor web. archivos de etiquetas se pueden utilizar para desarrollar etiquetas personalizadas que están centradas en presentación- o que pueden tomar ventaja de las bibliotecas de etiquetas
existentes, o por los autores de páginas que no saben Java. Cuando se necesita la flexibilidad del lenguaje de programación Java para definir la etiqueta, la tecnología JSP proporciona una API simple para el desarrollo de un controlador de
etiqueta en el lenguaje de programación Java. En este capítulo se supone que está familiarizado con el material de Capítulo 5, tecnología JavaServer Pages , Especialmente la sección El uso de etiquetas personalizadas . Para obtener más
información acerca de las bibliotecas de etiquetas y para saber cómo dirigirse a algunas bibliotecas de libre disposición, véase
http://java.sun.com/products/jsp/taglibraries/index.jsp .
contenedor web a continuación, invoca las operaciones cuando se ejecuta el servlet de la página JSP. Las etiquetas personalizadas tienen un rico conjunto de características. Ellos pueden
Personalizar a través de los atributos pasados desde la página de llamada. Pasar variables de nuevo a
la página de llamada. Acceder a todos los objetos disponibles en las páginas JSP.
Comunicarse entre sí. Puede crear e inicializar un componente JavaBeans, cree una variable EL pública que se refiere a que el frijol en una etiqueta, y luego usar el frijol en otra etiqueta.
Ejemplo páginas JSP , Reescrito para aprovechar varias etiquetas personalizadas: Un catalogar etiqueta para la prestación del catálogo de libros Un fecha de envío etiqueta para la prestación de la
Una biblioteca de plantillas para asegurar una apariencia común entre todas las pantallas y componer las pantallas de trozos de contenido Las tutorial-plantilla biblioteca etiqueta define un conjunto de etiquetas
para la creación de una plantilla de aplicación. La plantilla es una página JSP que tiene marcadores de posición para las partes que tienen que cambiar con cada pantalla. Cada uno de estos marcadores de posición se
conoce como un parámetro de la plantilla. Por ejemplo, una plantilla simple podría incluir un parámetro de título para la parte superior de la pantalla generada y un parámetro de cuerpo para hacer referencia a una página
JSP para el contenido personalizado de la pantalla. La plantilla se crea utilizando un conjunto de etiquetas anidadas ( definición , pantalla , y parámetro ) que se utilizan para construir una tabla de definiciones de pantalla
de la librería de Duke. Un insertar etiqueta para insertar los parámetros de la tabla en la pantalla.
Figura 8-1 muestra el flujo de una solicitud a través de los siguientes componentes web de la librería de Duke:
tut-install / javaeetutorial5 / examples / web / bookstore3 / web / plantilla / template.jsp , que determina la estructura de cada pantalla. Utiliza el insertar etiqueta para componer una pantalla de
subcomponentes.
tut-install / javaeetutorial5 / examples / web / bookstore3 / web / plantilla / screendefinitions.jspf , que define los subcomponentes utilizados por cada pantalla. Todas las pantallas tienen la misma
bandera pero diferente contenido de títulos y el cuerpo (especificado por la columna de páginas JSP en Figura 5-1 ).
Tut instalar / javaeetutorial5 / examples / web / bookstore3 / src / java / com / sun / bookstore3 / distribuidor / Dispatcher.java , un servlet, que procesa solicitudes y hacia delante para template.jsp .
El código fuente de la aplicación de librería de Duke está situado en el tut-install / javaeetutorial5 / examples / web / bookstore3 /
directorio creado al descomprimir el paquete tutorial (véase Capítulo 2, utilizando los ejemplos Tutorial ). Para desplegar y ejecutar la
1. Llevar a cabo todas las operaciones descritas en Acceso a bases de datos de aplicaciones Web .
5. Seleccione la casilla de verificación Abrir como proyecto principal y los proyectos abiertos casilla de verificación requiere.
8. Para ejecutar la aplicación, abra la dirección URL librería http: // localhost: 8080 / bookstore3 / librería .
2. Tipo hormiga . Este comando engendrará todas las compilaciones necesarias, copiar archivos en el gesto de desaprobación-
instalar/ javaeetutorial5 / examples / web / bookstore3 / build / directorio, y crear un archivo WAR y copiarlo en el Tut instalar / javaeetutorial5 / examples / web / bookstore3 / dist / directorio.
4. Llevar a cabo todas las operaciones descritas en Creación de un origen de datos en el servidor de aplicaciones .
5. Para desplegar el ejemplo, escriba ant deploy . El objetivo implementar da salida a una URL para ejecutar la aplicación. No haga caso de este URL, y en lugar de utilizar
la que se muestra en la siguiente etapa.
6. Para ejecutar la aplicación, abra la dirección URL librería http: // localhost: 8080 / bookstore3 / librería .
Para aprender cómo configurar el ejemplo, consulte la web.xml archivo, que incluye las siguientes configuraciones:
UN nombre para mostrar elemento que especifica el nombre que utilizan herramientas para identificar la aplicación. UN context-param elemento que especifica el nombre
de la base del paquete de recursos JSTL. UN oyente elemento que identifica la ContextListener clase utiliza para crear y eliminar el acceso a la base de datos. UN servlet elemento
elemento, que establece las propiedades para el grupo de páginas incluidas en esta versión de la librería de Duke. Ver Configuración de las propiedades de los grupos de páginas JSP para más
información. Para ejecutar el ejemplo, abra la URL librería http: // localhost: 8080 / bookstore3 / librería .
Ver Solución de problemas de base de datos de la librería de Duke para obtener ayuda con el diagnóstico de problemas comunes.
Tipos de etiquetas
etiquetas simples se invocan utilizando la sintaxis XML. Tienen una etiqueta de inicio y una etiqueta final, y posiblemente un cuerpo:
<Tt: tag>
cuerpo </ TT: tag>
Una etiqueta simple puede tener atributos. Atributos personalizar el comportamiento de una variable medida solo como parámetros personalizar el comportamiento de un método. Hay tres tipos de atributos:
Fragmento atributos
dinámicos
Atributos simples
atributos simples son evaluados por el envase antes de ser enviado al controlador de etiqueta. simples atributos enumerados en la etiqueta de inicio y tienen la sintaxis attr = "valor" . Se puede establecer un
valor de atributo simple a partir de una Cuerda constante, o un lenguaje de expresión (EL) la expresión, o mediante el uso de una jsp: atributo elemento (ver jsp: atributo Elemento ). El proceso de conversión
entre las constantes y expresiones y tipos de atributos sigue las reglas descritas para propiedades de los componentes JavaBeans en Configuración de componentes JavaBeans Propiedades . página de la
librería de Duke tut-install / javaeetutorial5 / examples / web / bookstore3 / web / bookcatalog.jsp llama a la
catalogar etiqueta, que tiene dos atributos. El primer atributo, una referencia a un objeto de base de datos de libro, se establece mediante una expresión EL. El segundo atributo, que establece el color de
las filas de una tabla que representa el catálogo de librería, se establece con una Cuerda constante.
etiqueta para producir contenido personalizado. Por lo tanto, a diferencia de un atributo simple que se evalúa por el contenedor, un atributo fragmento es evaluado por un controlador de etiqueta durante la invocación etiqueta. Para
declarar un atributo fragmento, se utiliza el fragmento atributo de la atributo Directiva (véase La declaración de atributos de etiqueta en archivos de etiquetas ) O utilizar el fragmento subelemento del atributo elemento de dominio de
nivel superior (véase La declaración de atributos de etiqueta para los controladores de etiquetas ). Se define el valor de un atributo fragmento utilizando una jsp: atributo elemento. Cuando se usa para especificar un atributo
fragmento, el cuerpo de la jsp: atributo elemento puede contener sólo texto estático y etiquetas estándar y personalizados; que no puede contener elementos de secuencias de comandos (ver Capítulo 9, de secuencias de comandos
en páginas JSP ). fragmentos JSP se pueden parametrizar por medio de lenguaje de expresión (EL) variables en el código JSP que compone el fragmento. Las variables de EL son fijados por el controlador de etiqueta, lo que
permite al controlador de personalizar el fragmento cada vez que se invoca (ver Declaración de variables del Tag en Tag Archivos y Declaración de variables de la etiqueta de controladores de etiquetas ). los catalogar etiqueta se
discutió anteriormente acepta dos fragmentos: precio normal , que se muestra para un producto que es el precio completo, y en venta ,
La etiqueta ejecuta el precio normal fragmento, usando los valores para el precio EL variables, si el producto es el precio completo. Si el producto está a la venta, la etiqueta ejecuta el en venta fragmento
usando el precio y precio de venta variables.
Por ejemplo, esta etiqueta acepta un número arbitrario de atributos cuyos valores son los colores y da salida a una lista con viñetas de los atributos de color de acuerdo a los valores:
También puede establecer el valor de los atributos dinámicos utilizando una expresión EL o el uso de la jsp: atributo elemento.
Valor diferida
Un atributo de valor diferida es uno que acepta expresiones de valor diferidos, que se describen en expresiones de valor .
Método diferido
Un atributo de método de lo diferido es uno que acepta expresiones método de lo diferido, que se describen en método Expresiones .
Por ejemplo, página de la plantilla de librería de Duke screendefinitions.jsp usos jsp: atributo utilizar la salida de fmt: message para establecer el valor de la valor atributo de la tt: parámetro :
. . .
<Tt: pantalla id = "/ BOOKCATALOG">
<Tt: parámetro name = "título" directa = "true">
<Jsp: atributo name = "valor">
<Fmt: clave de mensaje = "TitleBookCatalog" /> </ jsp: attribute> </ tt:
parámetro>
jsp: atributo acepta una nombre atributo y una recortar atributo. los nombre atributo identifica que se está especificando atributo de etiqueta. el opcional recortar atributo determina si o no el espacio en blanco
que aparece al principio y al final del cuerpo del elemento debe ser desechada. Por defecto, el espacio en blanco ataque y de salida se descarta. El espacio en blanco se recorta cuando se traduce la página
JSP. Si un cuerpo contiene una etiqueta personalizada que produce iniciales o finales espacios en blanco, espacio en blanco que se conserva independientemente del valor de la recortar atributo. Un cuerpo
vacío es equivalente a especificar "" como el valor del atributo. El cuerpo de jsp: atributo está restringida de acuerdo con el tipo de atributo que se especifica:
Para los atributos simples que aceptan una expresión EL, el cuerpo puede ser cualquier contenido JSP. Para los atributos simples que no aceptan una expresión EL, el cuerpo puede
contener sólo texto estático. Para los atributos de fragmentos, el cuerpo no debe de contener elementos de secuencias de comandos (ver Capítulo 9, de secuencias de comandos en
páginas JSP ).
ejemplo, página de la aplicación de librería de Duke Tut instalar / javaeetutorial5 / examples / web / bookstore3 / web / bookshowcart.jsp usa el JSTL c: si etiqueta para imprimir el cuerpo si la solicitud
href="list.jsp?deptName=${departmentName}">
$ {} DepartmentName </a> </ td>
</ Tr>
</ TLT: iterador>
crea una variable llamada EL pública una variable , que luego se reutiliza por anotherTag .
<C: set var = "AVariable" value = "unValor" /> <tt: anotherTag attr1 = "$ {}
AVariable" />
Las etiquetas anidadas pueden compartir objetos privados. En el siguiente ejemplo, un objeto creado por outerTag está disponible para innerTag . La etiqueta interior recupera su etiqueta principal y a continuación,
recupera un objeto de la matriz. Dado que el objeto no se nombra, el potencial de conflictos de nombres se reduce.
<Tt: outerTag>
<Tt: innerTag /> </ tt:
outerTag>
página de la librería de Duke tut-install / javaeetutorial5 / examples / web / bookstore3 / web / plantilla / template.jsp utiliza un conjunto de etiquetas que comparten objetos públicos y privados para definir las
pantallas de la aplicación cooperar. Estas etiquetas se describen en Una biblioteca de plantillas de etiquetas .
JSP se traduce en una clase de servlet y luego compilado, un fichero de etiquetas se traduce en un controlador de etiqueta y luego compilado. La extensión de archivo recomendado para un archivo de etiqueta es . etiqueta . Como es el caso con los
archivos JSP, la etiqueta puede estar compuesto de un archivo de la parte superior que incluye otros archivos que contienen ya sea una etiqueta completa o un fragmento de un archivo de etiquetas. Del mismo modo que la extensión recomendada para
un fragmento de un archivo JSP es . jspf , la extensión recomendada para un fragmento de un archivo de etiqueta es . tagF .
La siguiente versión de la aplicación Hello, World introducido en Capítulo 3, Introducción a las aplicaciones Web utiliza una etiqueta para generar la respuesta. los respuesta etiqueta, que acepta dos
atributos (una cadena saludo y un nombre) se encapsula en response.tag :
<% @ Atributo name = "saludo" requerido = "true" %> <% @ atributo name = "nombre" requerido = "true" %>
<h2> <font color = "negro"> $ {saludo}, $ { nombre}! </ font> </ h2>
La línea resaltada en el greeting.jsp invoca la página respuesta etiqueta si la longitud de la nombre de usuario parámetro de petición es mayor que
0:
<% @ Taglib tagdir = "/ WEB-INF / tags" prefix = "h" %> <% @ taglib uri =
"http://java.sun.com/jsp/jstl/core"
prefix = "c" %>
<% @ Taglib uri = "http://java.sun.com/jsp/jstl/functions"
prefijo = "fn" %> <html>
<Head> <title> Hola </ title> </ head> <body bgcolor = "blanco">
<img src = "duke.waving.gif">
<Input type = "text" name = tamaño "nombre de usuario" = "25"> <p> </ p>
Para desplegar y ejecutar el hello3 aplicación con el IDE NetBeans, siga estos pasos:
7. Para ejecutar la aplicación, abra la dirección URL librería http: // localhost: 8080 / hello3 .
Para desplegar y ejecutar el hello3 aplicación con Ant, siga estos pasos:
2. Tipo hormiga . Este objetivo engendrará todas las compilaciones necesarias, copiar archivos en el gesto de desaprobación-
instalar/ javaeetutorial5 / examples / web / hello3 / build / directorio, y crear un archivo WAR.
5. Para ejecutar el ejemplo, abra su navegador para http: // localhost: 8080 / hello3 .
Para aprender cómo configurar el ejemplo, consulte el descriptor de despliegue (la web.xml archivo), que incluye las siguientes configuraciones:
UN nombre para mostrar elemento que especifica el nombre que utilizan herramientas para identificar la aplicación. UN welcome-file-list elemento
directivas que se pueden utilizar en los archivos de etiquetas. Tabla 8-1 Directivas de archivos de etiquetas
Directiva Descripción
taglib Idéntico a taglib Directiva (véase La declaración de las bibliotecas de códigos ) Para las páginas JSP.
incluir Idéntico a incluir Directiva (véase Reutilizar contenido en páginas JSP ) Para las páginas JSP. Tenga en cuenta que si el archivo incluido contiene una sintaxis no aptos para archivos de etiquetas, se
etiqueta Similar a página la directiva en una página JSP, pero se aplica a etiquetar los archivos en lugar de las páginas JSP. Al igual que con la página Directiva, una unidad de traducción puede contener
más de una instancia de la etiqueta directiva. Todos los atributos se aplican a la unidad de traducción completa. Sin embargo, no puede haber una sola ocurrencia de cualquier atributo o valor
definido por esta directiva en una unidad de traducción dada. Con la excepción de la importar atributo, atributo múltiple o (re) definiciones de valores dan lugar a un error de traducción. También se
utiliza para la declaración de propiedades de etiquetas personalizadas, como nombre para mostrar. Ver La declaración de Etiquetas .
atributo Declara un atributo de la etiqueta personalizada definida en el archivo de etiquetas. Ver La declaración de atributos de etiqueta en archivos de etiquetas .
variable Declara una variable EL expuesta por la etiqueta a la página de llamada. Ver Declaración de variables del Tag en Tag Archivos .
La declaración de Etiquetas
los etiqueta Directiva es similar a la directiva de página de la página JSP, pero se aplica a etiquetar los archivos. Algunos de los elementos de la etiqueta Directiva aparece en la
etiqueta elemento de un TLD (ver La declaración de controladores de etiquetas ). Tabla 8-2 enumera los atributos directiva tag. Tabla 8-2 etiqueta Atributos
Directiva
Atributo Descripción
nombre para mostrar (Opcional) Un nombre corto que está destinado a ser visualizado por las herramientas. Por defecto es el nombre del archivo sin la extensión de etiqueta . etiqueta .
cuerpo de contenido (Opcional) Proporciona información sobre el contenido del cuerpo de la etiqueta. Pueden ser cualquiera de los dos vacío , tagdependent , o
scriptless . Un error de traducción resultará si JSP o se utiliza cualquier otro valor. Por defecto es scriptless . Ver Atributo contenido cuerpo- .
atributos (Opcional) Indica si esta etiqueta soporta atributos adicionales con nombres dinámicos. El valor de un atributo identifica con ámbito en el que colocar una Mapa que
Dynamic- contiene los nombres y valores de los atributos dinámicos pasan durante la invocación de la etiqueta.
Produce un error de traducción, si el valor de la -atributos dinámicos de un etiqueta Directiva es igual al valor de una
nombre dado de un variable directiva o el valor de una nombre atributo de un atributo directiva.
pequeña icono (Opcional) Ruta relativa, a partir del archivo fuente de la etiqueta, de un archivo de imagen que contiene un pequeño icono que puede ser utilizado por las herramientas. Por defecto es ningún icono pequeño.
-Icono grande (Opcional) Ruta relativa, a partir del archivo fuente de la etiqueta, de un archivo de imagen que contiene un icono grande que puede ser utilizado por las herramientas. Por defecto es ningún icono grande.
descripción (Opcional) define una cadena arbitraria que describe esta etiqueta. Por defecto es ninguna descripción.
ejemplo (Opcional) define una cadena arbitraria que presenta una descripción informal de un ejemplo de un uso de esta acción. El valor predeterminado es ningún ejemplo.
idioma (Opcional) lleva la misma sintaxis y la semántica de la idioma atributo de la página directiva.
importar (Opcional) lleva la misma sintaxis y la semántica de la importar atributo de la página directiva.
pageEncoding (Opcional) lleva la misma sintaxis y la semántica de la Página-Encoding atributo en el página directiva.
isELIgnored (Opcional) lleva la misma sintaxis y la semántica de la Isel-Ignorado atributo de la página directiva.
Debe declarar el contenido del cuerpo de las etiquetas que no aceptan como un cuerpo vacío . Para las etiquetas que tienen un cuerpo hay dos opciones. contenido del cuerpo que contiene la costumbre y etiquetas estándar
HTML y el texto se especifica como scriptless . Todos los demás tipos de contenido del cuerpo (por ejemplo, las sentencias SQL pasan a la consulta tag) se especifica como tagdependent . Si no se especifica ningún atributo,
el valor predeterminado es scriptless .
Atributo Descripción
nombre El nombre único del atributo que se declaró. Un error de traducción resultados si hay más de uno
atributo Directiva aparece en la misma unidad de traducción con el mismo nombre .
Produce un error de traducción, si el valor de una nombre atributo de un atributo Directiva es igual al valor de la -atributos dinámicos atributo de
una etiqueta directiva o el valor de una nombre dado
atributo de una variable directiva.
necesario (Opcional) Si se requiere este atributo ( cierto ) o opcional ( falso ). Por defecto es falso .
rtexprvalue (Opcional) Si el valor del atributo se puede calcular dinámicamente en tiempo de ejecución por una expresión. Por defecto es cierto . Cuando este
elemento se establece en cierto y la definición del atributo también incluye ya sea una
diferido-valor o diferido-método elemento entonces el atributo acepta ambas expresiones dinámicas y diferidos.
tipo (Opcional) El tipo de tiempo de ejecución del valor del atributo. Por defecto es java.lang.String .
deferredValue (Opcional) Indica si el atributo acepta diferido expresiones de valor. Sólo uno de
deferredValue o deferredMethod puede ser verdad. Si deferredValueType se especifica, el valor predeterminado para deferredValue es cierto . Provoca
un error de traducción si se especifica en un fichero de etiquetas JSP con una versión inferior a 2,1.
deferredValueType (Opcional) El tipo resultante de la evaluación de la expresión el valor del atributo. El valor por defecto es
java.lang.String Si no se especifica ningún tipo. Si ambos deferredValueType y deferredValue
se especifican, deferredValue debe ser verdad. Si deferredValue es cierto , el valor por defecto de
deferredValueType es java.lang.Object . Provoca un error de traducción se especifica en un fichero de etiquetas JSP con una versión inferior a 2,1.
deferredMethodSignature (Opcional) La firma del método para ser invocada por la expresión definido por la adjunta
deferredMethod atributo. Si deferredMethod Es cierto y este atributo no se especifica, el método de firma por defecto methodName anular () . Provoca
un error de traducción si se especifica en un fichero de etiquetas JSP con una versión inferior a 2,1.
fragmento (Opcional) Si este atributo es un fragmento para ser evaluados por el controlador de etiqueta ( cierto ) o un atributo normal a ser evaluado por el
etiquetas y las variables de EL, es posible emular varios tipos de parámetros: EN , FUERA , y anidada. Emular EN parámetros, atributos de uso de la etiqueta. Un atributo de etiqueta se comunica entre la página de llamada y
el archivo de la etiqueta cuando se invoca la etiqueta. Ninguna otra comunicación se produce entre la página de llamada y el archivo de etiquetas. Emular FUERA o parámetros anidados, usan variables de EL. La variable no
se ha inicializado por la página de llamada, sino que es fijado por el archivo de etiquetas. Cada tipo de parámetro se sincroniza con la página de llamada en diversos puntos de acuerdo con el alcance de la variable. Ver sincronización
Para declarar una variable EL expuesta por un archivo de etiquetas, se utiliza el variable directiva. A TLD tiene un análogo variable elemento (ver Declaración de variables de la etiqueta de controladores de
etiquetas ). Tabla 8-4 enumera el variable atribuye Directiva. Tabla 8-4 variable Atributos Directiva
Atributo Descripción
descripción (Opcional) Una descripción opcional de esta variable. Por defecto es ninguna descripción.
nombre dado por | Define una variable de EL para ser utilizado en la página invocando esta etiqueta. Ya sea nombre dado o Nombre-del-atributo
atributo de nombre-de- se debe especificar. Si nombre dado se especifica, el valor es el nombre de la variable. Si Nombre-del-atributo se especifica, el valor es el nombre de un atributo cuyo
(traducción en tiempo) Valor al comienzo de la invocación etiqueta le dará el nombre de la variable.
3. Si el valor de una nombre dado atributo de una variable Directiva es igual al valor de una nombre atributo de un
atributo directiva o el valor de una -atributos dinámicos atributo de una etiqueta directiva.
alias Define una variable, local al archivo de etiquetas, para mantener el valor de la variable EL. El recipiente se sincronizará este valor con la variable cuyo nombre se da en Nombre-del-atributo
.
Se requiere cuando Nombre-del-atributo está especificado. Produce un error de traducción si se utiliza sin atributo de nombre-de- .
Produce un error de traducción, si el valor de alias es el mismo que el valor de una nombre atributo de un atributo
directiva o el nombre dado atributo de una variable directiva.
clase variable (Opcional) El nombre de la clase de la variable. El valor por defecto es java.lang.String .
alcance (Opcional) El alcance de la variable. Pueden ser cualquiera de los dos AL PRINCIPIO , AT_END , o ANIDADO . Por defecto es ANIDADO .
sincronización variable
El contenedor web se encarga de la sincronización de las variables entre un archivo y una etiqueta de página de llamada. Tabla 8-5 resume cuándo y cómo cada objeto se sincroniza de acuerdo con el
Antes de cualquier invocación fragmento usando jsp: invocar o jsp: doBody ( ver Los fragmentos que evalúan pasado a marcar TAG> página Etiqueta- No sincronizar.
> página
Si nombre dado se utiliza para especificar el nombre de la variable, a continuación, el nombre de la variable en la página de llamada y el nombre de la variable en el archivo de etiquetas son lo mismo y es igual al
valor de nombre dado .
los Nombre-del-atributo y alias atributos de la variable Directiva se puede utilizar para personalizar el nombre de la variable en la página de llamada mientras que otro nombre se utiliza en el archivo de
etiquetas. Cuando se utilizan estos atributos, se establece el nombre de la variable en la página de llamada a partir del valor de Nombre-del-atributo en el momento en que se llama la etiqueta. El nombre de la
variable correspondiente en el archivo de etiquetas es el valor de alias .
Ejemplos de sincronización
Los siguientes ejemplos ilustran cómo la sincronización variable de trabaja entre un fichero de etiquetas y su página de llamada. Todos los ejemplos de las páginas JSP y archivos de etiqueta de referencia de la biblioteca de
etiquetas núcleo JSTL con el prefijo do . Las páginas JSP referencia a un archivo situado en la etiqueta / WEB-INF / tags con el prefijo mi .
AL PRINCIPIO Alcance
En este ejemplo, la AL PRINCIPIO ámbito de aplicación se utiliza para pasar el valor de la variable llamada X al cuerpo de la etiqueta y al final de la invocación de la etiqueta.
<% @ Variable = "x" scope = "AT_BEGIN" % nombre dado> $ {x} <% - (x == null) -%> <c:
set var = valor "x" = "2" /> <jsp: doBody />
En este ejemplo, la ANIDADO ámbito de aplicación se utiliza para hacer una variable llamada X disponible sólo para el cuerpo de la etiqueta. La etiqueta establece la variable a
2 , y este valor se pasa a la página de llamada antes de invocar el cuerpo. Debido a que el alcance es ANIDADO y porque la página de llamada también tenía una variable llamada X , su valor
original, 1 , se restaura cuando la etiqueta completa.
<% @ Variable de nombre dado por = alcance "x" = "anidados" %> $ {x} <% - (x == null)
-%> <c: set var = valor "x" = "2" /> <jsp: doBody />
En este ejemplo, la AT_END ámbito de aplicación se utiliza para devolver un valor a la página. El cuerpo de la etiqueta no se ve afectada.
<% @ Variable = "x" scope = "AT_END" % nombre dado> $ {x} <% - (x == null) -%> <c:
set var = valor "x" = "2" />
<Jsp: doBody />
$ {X} <% - (x == 2) -%> <c: set var = valor "x" = "4"
En este ejemplo la AL PRINCIPIO ámbito de aplicación se utiliza para pasar una variable de EL para el cuerpo de la etiqueta y hacer que esté disponible para la página de llamada al final de la invocación de la
etiqueta. El nombre de la variable es especificada por el valor del atributo var . La variable es referenciado por un nombre local, resultado , en el archivo de etiquetas.
<% @ Atributo name = "var" requerido = "true" rtexprvalue = "true" %> <% @ alias variable = "número"
nombre-de-atributo = "var"
scope = "AT_BEGIN" %> $ {x} <% - (x == null) -%> $
{resultado} <% - (resultado == null) -%> <c: set var =" x" value =
"ignorado"/> <c: set var = "" value = "número 2"/> <jsp: doBody />
El resultado de la evaluación de cualquier tipo de fragmento se envía a la respuesta o se almacena en una variable de EL para la manipulación posterior. Para almacenar el resultado de la evaluación de un
fragmento de una variable EL, se especifica el var o varReader atributo. Si var se especifica, el recipiente almacena el resultado en una variable EL de tipo Cuerda con el nombre especificado por var . Si varReader
se especifica, el recipiente almacena el resultado en una variable EL de tipo java.io.Reader , con el nombre especificado por varReader . los Lector objeto a continuación, se puede pasar a una etiqueta
personalizada para su posterior procesamiento. Un error de traducción se produce si se var y varReader se especifican. un opcional alcance atributo indica el alcance de la variable resultante. Los valores
solicitud . Un error de traducción se produce si utiliza este atributo sin especificar el var o varReader atributo.
<% @ Taglib prefix = tagdir "sc" = "/ WEB-INF / tags" %> <h3> <fmt: message key = "ThankYou" /> $ {}
param.cardname </ h3> <br> <. fmt: message key = "Con" />
<Em> <fmt: message key = "$ {} param.shipping" /> </ em>, <fmt: message key =
"ShipDateLC" /> <sc: ShipDate envío = "$ {} param.shipping" / >
La etiqueta determina el número de días hasta el envío de la Envío atributo se le ha pasado por la página Tut instalar / javaeetutorial5 / examples / web / bookstore3 / web / bookreceipt.jsp . A partir del
número de días, la etiqueta calcula la fecha de envío. A continuación, da formato a la fecha de envío.
<% @ Atributo name = "envío" requerido = "true" %> <jsp: useBean id = "ahora" class =
"java.util.Date" /> <jsp: useBean id = class = "java "fechaEnvio". util.Date"/> <c: choose>
fragmento = "true" %> <% @ nombre de atributo = "onSale" fragmento = "true" %> <% @ variable
de nombre-da = "precio" %> <% @ variable de nombre dado por = "salePrice" %> <center>
<table>
. . .
</ Table> </
center>
La página bookcatalog.jsp invoca la catalogar etiqueta que tiene los atributos simples BookDB , la cual contiene datos de catálogo, y color ,
que personaliza la coloración de las filas de la tabla. El formato de la lista de precios está determinado por dos atributos de los fragmentos, precio normal y
en venta , que son condicionalmente invocada por la etiqueta de acuerdo con los datos recuperados de la base de datos de libros.
<Fmt: valor formatNumber = "$ {} salePrice" type = "moneda" /> </ font> </ jsp: attribute> </ sc: catálogo>
La pantalla producido por tut-install / javaeetutorial5 / examples / web / bookstore3 / web / bookcatalog.jsp se muestra en la Figura 8- 2 . Se puede comparar con la versión en Figura 5-2 .
<C: forEach var = "color" begin = "0" items = "$ {} mapa de colores">
<Li> $ {} = color.key
<Font color = "$ {} color.value"> $ {} color.value </ font> </ li>
</ C: forEach> </ ul>
descriptor de la biblioteca es un documento XML que contiene información acerca de una biblioteca en su conjunto y de cada etiqueta contenida en la biblioteca. TLD son utilizados por un contenedor web para validar las
etiquetas y las herramientas de desarrollo página JSP. Los nombres de etiqueta archivo descriptor de la biblioteca deben tener la extensión . TLD y debe ser envasado en la / WEB-INF / directorio o subdirectorio del archivo WAR o
en el / META-INF / directorio o subdirectorio de una biblioteca de etiquetas envasada en un frasco. Si una etiqueta se implementa como un archivo de etiqueta y se empaqueta en
/ WEB-INF / tags / o en un subdirectorio, un TLD será generada automáticamente por el contenedor web, aunque se puede proporcionar uno si lo desea. La mayoría de los contenedores de establecer la versión JSP
de este TLD generado automáticamente (llamado un TLD implícita) a 2,0. Por lo tanto, con el fin de tomar ventaja de JSP 2.1 características, debe proporcionar un TLD que establece la versión JSP a 2,1 si usted no
tiene un TLD ya. Este dominio de nivel superior debe ser nombrado
implicit.tld y se coloca en el mismo directorio que los archivos de etiquetas.
Se establece la versión JSP utilizando el atributo de versión de la raíz taglib elemento que del dominio de nivel superior, como se muestra aquí:
<taglib
xsi: schemaLocation =
"Http://java.sun.com/xml/ns/javaee web-
jsptaglibrary_2_1.xsd"
xmlns = "http://java.sun.com/xml/ns/javaee" | xmlns: xsi =
"http://www.w3.org/2001/XMLSchema-instance" version = "2.1">
Tabla 8-6 enumera los subelementos del taglib elemento. Tabla 8-6 taglib subelementos
Elemento Descripción
nombre para (Opcional) Nombre destinada a ser representada por las herramientas.
mostrar
icono (Opcional) Icono que puede ser utilizado por las herramientas.
nombre corto (Opcional) Nombre que podría ser utilizada por una herramienta de creación de páginas JSP para crear nombres con un valor mnemotécnico.
tag-archivo | Declara los archivos de etiqueta o etiquetas definidas en la biblioteca de etiquetas. Ver La declaración de ficheros de etiquetas y La declaración de controladores de etiquetas . Una biblioteca de etiquetas no se considera
etiqueta válido si un tag-archivo elemento tiene una nombre subelemento con el mismo contenido como una nombre en un subelemento etiqueta elemento.
etiqueta- (opcional) Las extensiones que proporcionan información adicional acerca de la biblioteca de etiquetas de herramientas.
extensión
validador Elemento
Este elemento define un validador biblioteca de etiquetas opcional que puede ser utilizado para validar la conformidad de cualquier página JSP importar esta biblioteca de etiquetas a sus requerimientos. Tabla
8-7 enumera los subelementos del validador elemento. Tabla 8-7 validador subelementos
Elemento Descripción
oyente Elemento
Una biblioteca de etiquetas puede especificar algunas clases que son detectores de eventos (ver Manipulación de servlet del ciclo de vida Eventos ). Los oyentes se enumeran en el TLD como
oyente elementos, y el contenedor web tendrán una instancia de las clases de oyentes y registrarlos de manera análoga a la de los oyentes definidos a nivel GUERRA. A diferencia de los oyentes de nivel de
guerra, el orden en el que están registrados los oyentes la biblioteca de códigos no está definido. El único elemento parcial de la
oyente elemento es el oyente de clase elemento, que debe contener el nombre completo de la clase oyente.
Elemento Descripción
nombre para (Opcional) Nombre destinada a ser representada por las herramientas.
mostrar
icono (Opcional) Icono que puede ser utilizado por las herramientas.
camino ¿Dónde encontrar el archivo de etiquetas implementación de esta etiqueta, relativa a la raíz de la aplicación web o la raíz del archivo JAR para una biblioteca de etiquetas envasada en un
frasco. Esto debe comenzar con / WEB-INF / tags / si el archivo de etiquetas reside en la guerra, o / META-INF / tags / si el archivo de etiquetas reside en un frasco.
etiqueta- (opcional) Las extensiones que proporcionan información adicional acerca de la etiqueta de herramientas.
extensión
El contenedor web genera una biblioteca de etiquetas implícito para cada directorio bajo y que incluye / WEB-INF / tags / . No existen relaciones especiales entre los subdirectorios; se les permite
simplemente por razones de organización. Por ejemplo, la siguiente aplicación web contiene tres bibliotecas de etiquetas:
/ WEB-INF / tags / /WEB-INF/tags/a.tag
/WEB-INF/tags/b.tag / WEB-INF / tags / foo /
/WEB-INF/tags/foo/c.tag / WEB INF / tags / bar /
baz / /WEB-INF/tags/bar/baz/d.tag
nombre corto se deriva del nombre del directorio. Si el directorio es / WEB-INF / tags / , el nombre corto es simplemente etiquetas . De lo contrario, la ruta completa (en relación con la aplicación
web) se toma, menos el / WEB-INF / tags / prefijo. Entonces todo / caracteres son reemplazados con
- (Guión), que da el nombre corto. Tenga en cuenta que los nombres cortos no se garantiza que sea único. UN tag-archivo elemento se
considera que existe para cada archivo de etiquetas, con las siguientes subelementos:
los nombre para cada uno es el nombre de archivo del archivo de etiquetas, sin la . etiqueta extensión. los camino para cada uno es la ruta
del archivo de etiquetas, relativa a la raíz de la aplicación web. Así, para el ejemplo, el TLD implícita para la / WEB-INF / tags / bar / baz / directorio
sería la siguiente:
<Taglib>
<TLIB-version> 1.0 </ TLIB-version> <nombre corto> bar-baz
</ corto nombre> <tag-file>
A pesar de la existencia de una biblioteca de etiquetas implícita, un TLD en la aplicación web todavía puede crear etiquetas adicionales de los mismos archivos de etiquetas. Para lograr esto, se agrega una tag-archivo elemento con
una camino que apunta al archivo de etiquetas.
etiquetas que se puede utilizar fácilmente en cualquier aplicación web. archivos de etiquetas empaquetadas en un JAR requieren un descriptor de la biblioteca. archivos de etiquetas que aparecen en un frasco, pero no están definidos en un dominio
Cuando se utiliza en un archivo JAR, el camino subelemento del tag-archivo elemento especifica la ruta completa del archivo de etiquetas de la raíz de la jarra. Por lo tanto, siempre debe comenzar
con / META-INF / tags / .
archivos de etiquetas también pueden ser compilados en las clases de Java y empaquetados en una biblioteca de etiquetas. Esto es útil cuando se desea distribuir una versión binaria de la biblioteca de etiquetas sin la fuente
original. Si elige esta forma de envasado, se debe utilizar una herramienta que produce código JSP portátil que utiliza las API estándar solamente.
Cuando las etiquetas se implementan con controladores de etiquetas escritas en Java, cada etiqueta en la biblioteca debe ser declarado en el TLD con una etiqueta elemento. los etiqueta
elemento contiene el nombre de la etiqueta, la clase de su controlador de etiqueta, la información sobre atributos de la etiqueta y la información sobre las variables creadas por la etiqueta (ver Etiquetas que definen las variables ).
Cada declaración de atributo contiene una indicación de si se requiere el atributo, si su valor puede ser determinado por las expresiones de tiempo petición, el tipo de atributo y si el atributo es un fragmento. La
información variable se puede dar directamente en el dominio de nivel superior o por medio de una clase de información adicional de la etiqueta. Tabla 8-9 enumera los subelementos del etiqueta elemento. Tabla 8-9 etiqueta
subelementos
Elemento Descripción
nombre para (Opcional) Nombre destinada a ser representada por las herramientas.
mostrar
icono (Opcional) Icono que puede ser utilizado por las herramientas.
Elemento Descripción
tei de clase (Opcional) Subclase de javax.servlet.jsp.tagext.TagExtraInfo . Ver Declaración de variables de la etiqueta de controladores de etiquetas .
variable (Opcional) Declara una variable EL expuesta por la etiqueta a la página de llamada. Ver Declaración de variables de la etiqueta de controladores de etiquetas .
atributo Declara un atributo de la etiqueta personalizada. Ver La declaración de atributos de etiqueta para los controladores de etiquetas .
atributos Si la etiqueta es compatible con atributos adicionales con nombres dinámicos. Por defecto es falso . Si es verdad, la clase controlador de etiqueta debe implementar
Dynamic- la javax.servlet.jsp.tagext.DynamicAttributes interfaz.
etiqueta- (opcional) Las extensiones que proporcionan información adicional acerca de la etiqueta de herramientas.
extensión
Se especifica el tipo de cuerpo que tiene una validez de una etiqueta mediante el uso de la cuerpo de contenido elemento. Este elemento es utilizado por el contenedor web para validar que una invocación etiqueta tiene la sintaxis correcta
del cuerpo y es utilizado por las herramientas de la página de composición para ayudar al autor de la página en la prestación de un cuerpo etiqueta válida. Hay tres posibles valores:
tagdependent : El cuerpo de la etiqueta es interpretada por la propia implementación de la etiqueta, y es más probable en un idioma diferente, por ejemplo, las sentencias de SQL incorporado.
scriptless : El cuerpo sólo acepta texto estático, las expresiones EL, y etiquetas personalizadas. No se permiten elementos de guiones.
Elemento Descripción
nombre El nombre único del atributo que se declaró. Un error de traducción resultados si hay más de uno atributo elemento aparece en la misma etiqueta con el mismo nombre
.
rtexprvalue (Opcional) Si el valor del atributo se puede calcular de forma dinámica en tiempo de ejecución por una expresión EL. El valor por defecto es
falso . Cuando este elemento se establece en cierto y la definición del atributo también incluye ya sea una diferido-valor o
diferido-método elemento entonces el atributo acepta ambas expresiones dinámicas y diferidos.
tipo (Opcional) El tipo de tiempo de ejecución del valor del atributo. Por defecto es java.lang.String si no se especifica.
fragmento (Opcional) Si este atributo es un fragmento para ser evaluados por el controlador de etiqueta ( cierto ) o un atributo normal a ser evaluado por el recipiente antes de
valor deferred- (Opcional) Indica que el atributo de etiqueta acepta diferido expresiones de valor. Este elemento incluye un opcional tipo
elemento hijo, que indica el tipo de objeto a la que se resuelve la expresión. Si no tipo elemento está incluido, el tipo es java.lang.Object . O bien el diferido-valor o diferido-método
elemento (pero no ambos) se puede definir para el mismo atributo.
método deferred- (Opcional) Indica que el atributo de etiqueta acepta diferido expresiones de método. Este elemento incluye un opcional
método de firma elemento hijo, que indica la firma del método que invoca la expresión. Si no se define una firma de método, el método predeterminado de firma es methodName
anular () . O bien el diferido-valor
o diferido-método elemento (pero no ambos) se puede definir para el mismo atributo.
Si no se requiere un atributo de etiqueta, un controlador de etiqueta debe proporcionar un valor por defecto. los etiqueta elemento para una etiqueta que da salida a su cuerpo si se evalúa como una prueba cierto declara que la prueba Se requiere
de atributos y que su valor se puede ajustar por una expresión de tiempo de ejecución.
. . .
</ Tag>
href="list.jsp?deptName=${departmentName}">
$ {} DepartmentName </a> </ td>
</ Tr> </ TLT:
iterador>
Cuando se traduce la página JSP que contiene esta etiqueta, el contenedor web genera código para sincronizar la variable con el objeto referenciado por la variable. Para generar el código, el contenedor
web requiere cierta información acerca de la variable:
Nombre de la variable de
clase variable
variable
Hay dos maneras de proporcionar esta información: especificando el variable subelemento TLD o mediante la definición de una clase de información adicional e incluyendo la etiqueta tei de clase elemento en
el TLD (ver TagExtraInfo Clase ). Utilizando el variable elemento es más simple pero menos dinámico. Con el
variable elemento, el único aspecto de la variable que se puede especificar en tiempo de ejecución es su nombre (con la Nombre-del-atributo elemento). Si usted proporciona esta información en una clase de información
adicional etiqueta, también puede especificar el tipo de la variable en tiempo de ejecución.
Tabla 8-11 enumera los subelementos del variable elemento. Tabla 8-11 variable subelementos
Elemento Descripción
nombre dado por | Define una variable de EL para ser utilizado en la página invocando esta etiqueta. Ya sea nombre dado o Nombre-del-atributo
atributo de nombre-de- se debe especificar. Si nombre dado se especifica, el valor es el nombre de la variable. Si Nombre-del-atributo se especifica, el valor es el nombre de un atributo cuyo
(traducción en tiempo) Valor al comienzo de la invocación etiqueta le dará el nombre de la variable.
especificando ni nombre dado ni Nombre-del-atributo o ambos. Si dos variable elementos tienen la misma nombre
dado .
clase variable (Opcional) El nombre completo de la clase del objeto. java.lang.String es el valor predeterminado.
declarar (Opcional) Sea o no el objeto se declara. Cierto es el valor predeterminado. Un error de traducción resultados si ambos declarar y
fragmento se especifican.
Elemento Descripción
alcance (Opcional) El alcance de la variable definida. Pueden ser cualquiera de los dos AL PRINCIPIO , AT_END , o ANIDADO ( ver Tabla 8-12 ). Por defecto es ANIDADO .
Tabla 8-12 resume la disponibilidad de una variable de acuerdo con su ámbito declarado. Tabla 8-12
disponibilidad variable
Valor Disponibilidad
AL PRINCIPIO A partir de la etiqueta de inicio hasta que el alcance de cualquier etiqueta donde se incluye. Si no hay etiqueta donde se incluye, a continuación, al final de la página.
AT_END Después de la etiqueta de cierre hasta que el alcance de cualquier etiqueta envolvente. Si no hay etiqueta donde se incluye, a continuación, al final de la página.
<Tag> <Variable>
Las interfaces pueden ser utilizadas para tomar un objeto Java existente y convertirlo en un controlador de etiqueta. Para los manipuladores de más reciente creación, se usaría el SimpleTagSupport clases como una
clase base. El corazón de un simple controlador de etiqueta es un método único, doTag , que se invoca cuando se encuentra el elemento final de la etiqueta. Tenga en cuenta que la implementación predeterminada de
Un controlador de etiqueta tiene acceso a una API que permite la comunicación con la página JSP. El punto de entrada a la API es el objeto de contexto JSP ( javax.servlet.jsp.JspContext ). los JspContext objeto
proporciona acceso a objetos implícitos. PageContext se extiende JspContext con el comportamiento en servlet específico. A través de estos objetos, un manejador de etiqueta puede recuperar todos los demás
objetos implícitos (petición, sesión y aplicación) que son accesibles desde una página JSP. Si se anida la etiqueta, un controlador de etiqueta también tiene acceso al controlador (llamado el padre) que se asocia
con la etiqueta donde se incluye.
Las siguientes secciones describen los métodos que se necesita para desarrollar para cada tipo de etiqueta introducida en Tipos de etiquetas .
etiqueta básica discutido en la primera sección, < TT: básica /> , sería implementado por el controlador siguiente etiqueta:
Como se muestra por el ejemplo anterior, el nombre del atributo debe coincidir con el nombre del método de conjunto.
atributo de validación
La documentación de una biblioteca de etiquetas debe describir los valores válidos de atributos de etiqueta. Cuando se traduce una página JSP, un contenedor web hará cumplir las restricciones contenidas en el elemento
de TLD para cada atributo.
Los atributos pasados a una etiqueta también se pueden validar en tiempo de traducción mediante el validar método de una clase derivada de TagExtraInfo .
Esta clase también se utiliza para proporcionar información acerca de las variables definidas por la etiqueta (ver TagExtraInfo Clase ). los validar método se pasa la información de atributos en una tagdata objeto,
que contiene tuplas atributo-valor para cada uno de los atributos de la etiqueta. Debido a que la validación se produce en tiempo de traducción, el valor de un atributo que se calcula en el momento de la
solicitud se ajustará a
TagData.REQUEST_TIME_VALUE .
La etiqueta < TT: attr1 TWA = "valor1" /> tiene la siguiente TLD atributo elemento:
<Atributo>
<Nombre> attr1 </ name> <required> true </ required>
<rtexprvalue> true </ rtexprvalue> </ attribute>
Esta declaración indica que el valor de attr1 puede ser determinado en tiempo de ejecución. El seguimiento validar método comprueba si el valor de attr1 es un valor booleano válido. Tenga en cuenta que debido a que
el valor de attr1 puede ser calculada en tiempo de ejecución, validar debe comprobar si el usuario etiqueta ha elegido para proporcionar un valor de tiempo de ejecución.
Método para recordar los nombres y valores de los atributos dinámicos de modo que puedan ser utilizados más tarde, cuando doTag es ejecutado. Si el setDynamicAttribute método produce una excepción, la doTag
método no se invoca para la etiqueta, y la excepción debe ser tratada de la misma manera como si viniera de un método de atributo setter. La siguiente aplicación de setDynamicAttribute guarda los nombres
de atributos y valores en las listas. Luego, en el doTag método, los nombres y los valores se hizo eco de la respuesta en una lista HTML.
ArrayList claves privadas = new ArrayList (); ArrayList valores privados = new
LocalName cadena, valor del objeto) lanza JspException {keys.add (localName); values.add (valor); }
Los métodos que acceden al valor de un atributo de valor diferida método deben aceptar una ValueExpression objeto. Los métodos que acceden al valor de un atributo de método de lo diferido deben
aceptar una MethodExpression objeto. Estos métodos toman la forma conjunto XXX , dónde XXX es el nombre del atributo.
El siguiente ejemplo muestra un método que puede ser utilizado para acceder al valor de un atributo de valor diferido llamado Nombre del Atributo :
attributeName; }
atributos de valor diferidos y los atributos de los métodos diferidos son utilizados principalmente por la tecnología JavaServer Faces. Ver Obtención de los valores de atributo para un ejemplo de creación de un
controlador de etiqueta que procesa estos atributos para un JavaServer Faces aplicación.
Si usted tiene un atributo que es a la vez dinámico y diferidos (lo que significa que la definición atributo de etiqueta acepta una expresión diferida y tiene
rtexprvalue establecido en true), entonces la setX método que accede a este valor debe aceptar una Objeto instancia y prueba si el Objeto
instancia es una expresión de valor diferida, como se muestra en este pseudocódigo:
// esto es un rtexpression}}
controlador de etiqueta acepta una prueba parámetro y evalúa el cuerpo de la etiqueta si la prueba se evalúa como cierto . El cuerpo de la etiqueta se encapsula en un fragmento JSP. Si la prueba es cierto , el
controlador recupera el fragmento usando el getJspBody método. los invocar método dirige toda la salida a un escritor suministrado o, si el escritor es nulo , al JspWriter devuelto por el salí método de la JspContext
si (prueba) {
. GetJspBody () invocar (null); }}}
Un atributo de etiqueta se comunica entre la página de llamada y el controlador de etiqueta cuando se invoca la etiqueta. Ninguna otra comunicación se produce entre la página de llamada y el controlador de etiqueta. Emular FUERA
o parámetros anidados, usan variables con disponibilidad AL PRINCIPIO , AT_END , o ANIDADO . La variable no se ha inicializado por la página de llamada, sino que es fijado por el controlador de etiqueta. por AL PRINCIPIO la
disponibilidad, la variable está disponible en la página de llamada de la etiqueta de inicio hasta que el alcance de cualquier etiqueta donde se incluye. Si no hay etiqueta donde se incluye, entonces la variable está disponible al
final de la página. por AT_END la disponibilidad, la variable está disponible en la página de llamada después de la etiqueta de cierre hasta que el alcance de cualquier etiqueta donde se incluye. Si no hay etiqueta donde se incluye,
entonces la variable está disponible al final de la página. Para los parámetros anidados, la variable disponible en la página de llamada entre la etiqueta de inicio y la etiqueta final.
Al desarrollar un controlador de etiqueta usted es responsable de la creación y configuración del objeto referenciado por la variable en un contexto en el que se puede acceder desde la página. Esto se hace
mediante el uso de la JspContext () . setAttribute (nombre, valor) o
JspContext.setAttribute (nombre, valor, alcance) método. Recuperar el contexto de la página utilizando el getJspContext método de
SimpleTag .
Por lo general, un atributo se pasa a la etiqueta personalizada especifica el nombre de la variable y el valor de la variable depende de otro atributo. Por ejemplo, el iterador tag introducido en Capítulo 5,
tecnología JavaServer Pages recupera el nombre de la variable de la var
atribuir y determina el valor de la variable a partir de un cálculo realizado en el grupo atributo.
this.var = var;
Public void} setGroup (grupo Collection) {
El alcance que una variable puede haber se resume en Tabla 8-13 . El alcance limita la accesibilidad y la vida útil del objeto. Tabla 8-13 Ámbito de objetos
página Página actual Hasta que la respuesta ha sido enviado de vuelta al usuario o la petición
se pasa a una nueva página
solicitud página actual y las páginas incluidas o reenviados Hasta que la respuesta ha sido enviado de vuelta al usuario
sesión solicitud actual y cualquier solicitud posterior desde el mismo navegador (con La vida de la sesión del usuario
duración de sesión)
solicitud Actual y cualquier solicitud futura de la misma aplicación web La vida de la aplicación
TagExtraInfo Clase
Declaración de variables de la etiqueta de controladores de etiquetas discutió cómo proporcionar información sobre las variables de la etiqueta en el descriptor de la biblioteca. En esta sección se describe otro enfoque: la
definición de una clase extra info etiqueta. Se define una clase extra info etiqueta extendiendo la clase
javax.servlet.jsp.tagext.TagExtraInfo . UN TagExtraInfo debe implementar la getVariableInfo método para devolver una matriz de
VariableInfo objetos que contienen la siguiente información:
Nombre de la variable de
clase variable
disponibilidad de la variable
El contenedor banda pasa un parámetro de tipo javax.servlet.jsp.tagext.TagData al getVariableInfo método, que contiene tuplas atributo-valor para cada uno de los atributos de la etiqueta. Estos atributos
pueden ser utilizados para proporcionar la VariableInfo objeto con el nombre y la clase de una variable EL.
El siguiente ejemplo demuestra cómo proporcionar información sobre la variable creada por el iterador etiqueta en una clase de información adicional de la etiqueta. Debido a que el nombre ( var ) y la clase ( tipo
) de la variable se pasa como atributos de las etiquetas, pueden ser recuperados utilizando el
data.getAttributeString método y se puede utilizar para rellenar el VariableInfo constructor. Para permitir que la variable var para ser utilizado sólo dentro del cuerpo de la etiqueta, se establece el alcance
del objeto a ANIDADO .
iterador paquete;
public class IteratorTEI extiende TagExtraInfo {
pública VariableInfo [] getVariableInfo (datos) {tagdata
tipo String = data.getAttributeString ( "tipo"); si (tipo == null)
VariableInfo.NESTED)
}; }}
El nombre completo de la clase de información adicional etiqueta definida por una variable EL debe ser declarado en el dominio de nivel superior en el tei de clase subelemento del
etiqueta elemento. Por lo tanto, la tei de clase elemento para IteratorTei sería la siguiente:
<Tei de clase>
iterator.IteratorTEI </ clase tei>
cooperar Etiquetas
Etiquetas cooperan mediante el intercambio de objetos. La tecnología JSP es compatible con dos estilos de intercambio de objetos.
El primer estilo requiere que un objeto compartido se llamará y se almacena en el contexto de la página (uno de los objetos implícitos accesibles a las páginas JSP, así como controladores de etiquetas). Para acceder a
los objetos creados y nombrados por otra etiqueta, un controlador de etiqueta utiliza el pageContext.getAttribute (nombre, alcance)
método.
En el segundo estilo de intercambio de objeto, un objeto creado por el controlador de etiqueta envolvente de un grupo de etiquetas anidadas está disponible para todos controladores de etiquetas interiores. Esta forma de intercambio de
objeto tiene la ventaja de que utiliza un espacio de nombres privado para los objetos, lo que reduce el potencial de conflictos de nombres. Para acceder a un objeto creado por una etiqueta que encierra, un controlador de etiqueta debe
. . .
}}}
El código de consulta ejecutado por este controlador de etiqueta se puede utilizar en cualquiera de las siguientes maneras:
<Tt: param value = "$ {} requestScope.custNumber" /> </ tt: query> </ tt: Conexión>
El TLD para el controlador de etiqueta utiliza la siguiente declaración para indicar que el ID de conexión atributo es opcional:
<Tag> ...
<Atributo>
<Nombre> ID de conexión </ name> <required>
false </ required> </ attribute> </ tag>
Ejemplos controlador de etiqueta
Las etiquetas simples descritos en esta sección demuestran soluciones a dos problemas recurrentes en el desarrollo de aplicaciones JSP: reducir al mínimo la cantidad de programación Java en páginas
JSP y asegurar un aspecto común en todas las aplicaciones. De este modo, se ilustran muchos de los estilos de etiquetas discutidos en la primera parte del capítulo.
etiquetar los manipuladores, etiquetas de flujo de control reducen la cantidad de secuencias de comandos necesarios en las páginas JSP. Iteración es una función de control de flujo muy común y es fácilmente manejado por una
etiqueta personalizada. La discusión sobre el uso de bibliotecas de etiquetas en Capítulo 5, tecnología JavaServer Pages introducido una biblioteca de etiquetas que contiene una iterador etiqueta. La etiqueta recupera objetos de
una colección almacenada en un componente JavaBeans y los asigna a una variable EL. El cuerpo de la etiqueta recupera información de la variable. Mientras siguen siendo elementos de la colección, la iterador etiqueta hace que
el cuerpo ser reevaluado. La etiqueta en este ejemplo se ha simplificado para que sea fácil de demostrar cómo programar una etiqueta personalizada. aplicaciones web que requieren dicha funcionalidad se debe usar el JSTL
página JSP
los index.jsp invoca la página iterador etiqueta para iterar a través de una colección de nombres de departamento. Cada elemento de la colección se asigna a la Nombre de Departamento variable.
<Head>
<Title> Departamentos </ title> </ head>
href="list.jsp?deptName=${departmentName}">
$ {} DepartmentName </a> </ td>
</ Tr>
</ TLT: iterador> </ table> </
body> </ html>
tag Handler
La colección se encuentra en el controlador de etiqueta por medio de la grupo atributo. El controlador de etiqueta recupera un elemento del grupo y pasa el elemento de volver a la página en la variable EL
cuyo nombre está determinada por la var atributo. La variable se accede en la página de llamada usando el lenguaje de expresión JSP. Después de que se establece la variable, el cuerpo de la etiqueta se
evalúa con el invocar método.
this.var = var;
Public void} setGroup (grupo Collection) {
La plantilla es una página JSP que tiene marcadores de posición para las partes que tienen que cambiar con cada pantalla. Cada uno de estos marcadores de posición se conoce como un parámetro de la plantilla. Por ejemplo,
una plantilla simple podría incluir un parámetro de título para la parte superior de la pantalla generada y un parámetro de cuerpo para hacer referencia a una página JSP para el contenido personalizado de la pantalla.
La plantilla utiliza un conjunto de etiquetas anidadas ( definición , pantalla , y parámetro ) para definir una tabla de definiciones de pantalla y utiliza una
insertar etiqueta para insertar parámetros de una definición pantalla en una pantalla de la aplicación específica.
Páginas JSP
La plantilla, por ejemplo, la librería de Duke, Tut instalar / javaeetutorial5 / examples / web / bookstore3 / web / plantilla / template.jsp , se muestra a continuación. Esta página incluye una página JSP
que crea la definición de la pantalla y luego utiliza el insertar etiqueta para insertar parámetros de la definición en la pantalla de la aplicación.
<% @ Taglib uri = "/ tutorial-plantilla" prefix = "tt" %> <% @ page ErrorPage = "/ template /
errorinclude.jsp" %> <% @ include file = "/ template / screendefinitions.jsp" % > <html> <head> <title>
<Tt: inserto definición = "librería" parámetro = "título" /> </ title> </ head>
los tut-install / javaeetutorial5 / examples / web / bookstore3 / web / plantilla / screendefinitions.jspf página crea una definición de la pantalla especificada por el atributo de la petición javax.servlet.forward.servlet_path
:
. . .
</ Tt: definición>
La plantilla se crea una instancia por el Transportista servlet. Transportista primero obtiene la pantalla solicitada. Transportista realiza objetos de lógica de negocio y actualizaciones modelo basado en la
pantalla solicitada. Por ejemplo, si la pantalla es solicitado / BOOKCATALOG , Transportista determina si un libro está siendo añadido a la cesta basado en el valor del parámetro de solicitud de adición. Se
establece el precio del libro si está en venta, y después se añade el libro a la cesta. Por último, el servlet envía la solicitud a template.jsp :
si (book.getOnSale ()) {
doble venta = book.getPrice () * 0,85; Flotador salePrice = new Float
(BookNotFoundException ex) {
// imposible } }
cart.clear (); }
request.getRequestDispatcher (
"/bookordererror.jsp"). hacia adelante (solicitud,
respuesta);
} Catch (Exception e) {
System.out.println (
"Error en retroceso:" + e.getMessage ());
e.printStackTrace ();
} } } tratar
{ solicitud.
getRequestDispatcher ( "/template/template.jsp").
hacia adelante (solicitud, respuesta);
getRequestDispatcher ( "/template/template.jsp").
hacia adelante (solicitud, respuesta);
controladores de etiquetas
La biblioteca de etiquetas de plantilla contiene cuatro controladores de etiquetas ( DefinitionTag , ScreenTag , ParameterTag , y InsertTag ) que demuestran el uso de etiquetas de cooperar. DefinitionTag , ScreenTag
, y ParameterTag constituyen un conjunto de controladores de etiquetas anidadas que comparten objetos privados. DefinitionTag crea un objeto público denominado librería que es utilizado por InsertTag .
En doTag , Tut instalar / javaeetutorial5 / examples / web / bookstore3 / src / java / com / sun / bookstore3 / template / DefinitionTag.java
crea un objeto privado llamado pantallas que contiene una tabla hash de definiciones de pantalla. Una definición de la pantalla consiste en un identificador de pantalla y un conjunto de parámetros asociados
con la pantalla. Estos parámetros se cargan cuando el cuerpo de la etiqueta de definición, que contiene anidada pantalla
y parámetro etiquetas, se invoca. DefinitionTag crea un objeto de la clase pública Tut instalar / javaeetutorial5 / examples / web / bookstore3 / src / java / com / sun / bookstore3 / template / Definition.java , selecciona
una definición de la pantalla de la pantallas objeto basa en la URL que ha facilitado en la solicitud, y utiliza esta definición de la pantalla para inicializar un público
Definición objeto.
La tabla de definiciones de pantalla se rellena por ScreenTag y ParameterTag de texto proporcionado como atributos a estas etiquetas. Tabla 8-14 muestra el contenido de la tabla hash definiciones de
Si la URL aprobada en la solicitud es / librería , el Definición objeto contiene los elementos de la primera fila de Tabla 8-14 (ver Tabla 8-15 ). Contenido Tabla 8-15 Definición de objeto para el URL / librería
Los parámetros de la URL / librería se muestran en la Tabla 8-16 . Los parámetros especifican que el valor de la título parámetro, Librería de Duke , debe ser insertado directamente en el flujo de salida, pero
los valores de bandera y cuerpo deben incluirse de forma dinámica. Tabla 8-16 Parámetros para la URL / librería
tut-install / javaeetutorial5 / examples / web / bookstore3 / src / java / com / sun / bookstore3 / template / InsertTag.java
inserta parámetros de la definición de la pantalla en la respuesta. los doTag método recupera el objeto definición del contexto de la página y luego inserta el valor del parámetro. Si el parámetro es directa,
que se inserta directamente en la respuesta; de lo contrario, la solicitud se envía al parámetro, y la respuesta se incluye de forma dinámica en la respuesta global.
doTag public void () {lanza JspTagException
Definición definición = null; Parámetro Parámetro = null;
directInclude boolean = false;
si (parámetro! = null)
directInclude = parameter.isDirect (); tratar { // si el parámetro es directa,
impresión a cabo
si (parámetro directInclude &&! = null)
. Context.getOut () print (parameter.getValue ()); // si el parámetro es indirecta,
Anterior: Capítulo 7 de JavaServer Pages Standard Tag Library Siguiente: Capítulo 9 de secuencias de comandos en páginas JSP