JSTL: Leyendo atributos de la cabecera de una petición

2
9090

JSTL: Leyendo atributos de la cabecera de una petición

0. Índice de contenidos.

1. Introducción

Java Standard Tag Library (JSTL) es un conjunto de tags que nos ayudan a resolver las situaciones más comunes a nivel de presentación.
JSTL nos permitirá entre otras cosas setear, obtener y mostrar variables del entorno, iterar colecciones, crear condiciones lógicas y formatear fechas y números etc .. .
JSTL comienza a ser sumamente útil cuando se combina con un lenguaje de expresiones Expression Language (EL). EL es una sintáxis para referenciar objetos, atributos y crear expresiones lógicas.
EL y JSTL en conjunto forman una solución muy simple y poderosa para resolver las posibles dificultades de la presentación.

En el tutorial de hoy veremos como usar dicha combinación para recuperar atributos de la cabecera de la petición y así poder renderizar distintos componentes de presentación.
Como veremos a continuación en el ejemplo, la necesidad surge a partir del distinto comportamiento de un componente JSF en Internet Explorer y Firefox y por tanto la aplicación funciona correctamente o no
en función del navegador que estemos utilizando.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware : Portátil Mac Book Pro 15″ (2,6 Ghz Intel Core i7, 4 GB DDR3).
  • Sistema Operativo:Mac OS X Snow Leopard 10.6.7
  • Tomcat 7.x
  • Mozilla Firefox 3.6.17
  • Internet Explorer 8
  • JSF 2.0.3
  • JSP 2.2
  • EL 2.2

3. Pre-Requisitos

Para el correcto funcionamiento del ejemplo propuesto es imprescindible hacer uso de EL 2.0 o superior debido principalmente al uso de funciones.
Para ello la manera más facil es correr nuestra aplicación bajo Tomcat 7.X que automaticamente nos proporciona soporte para JSP 2.2 Y EL 2.2.

4. Ejemplo práctico

Lo primero de todo y para que sea más cómodo seguir el tutorial os dejo los fuentes del ejemplo aquí . Como vereís a continuación el ejemplo propuesto no puede ser más sencillo, sin embargo es suficiente para ver el potencial de JSTL y EL a la hora de resolver ciertas dificultades a nivel de presentación.

Al acceder a la aplicación http://localhost:8080/jstl-el/ encontraremos una pantalla inicial con dos enlaces. Ambos enlaces nos mostrarán pantallas iguales a diferencia del soporte de JSTL y EL.

Hacemos «click» en el primer enlace y navegaremos a la siguiente pantalla:

cuyo código es el siguiente:




	

	
	<h:outputText value="#{msg['app_title']}" />



	
	
	

Como podéis comprobar esta página no tiene ningún misterio y lo que he pretendido con ella es que podáis observar el distinto comportamiento del componente JSF en ambos navegadores (IE,Firefox) y así tener una idea exacta del problema que provoca dicho componente. Si os fijáis en la linea 17 es donde definimos el componente JSF con un evento de cambio de valor. Sin embargo si hacéis uso de IE os daréis cuenta de que el cambio de valor se produce cuando el componente pierde el foco, es decir cuando hacemos «click» en el componente y este queda marcado todavía no se ha producido ningún evento y viceversa.

Aquí es donde entra en juego la alianza entre JSTL y EL que nos va a permitir obtener información de la cabecera de la petición. Desde la página de inicio hacemos «click» en el segundo enlace y nos mostrará una pagina exactamente igual que la anterior. Sin embargo si analizamos su código veremos algunas diferencias:




	

	
	<h:outputText value="#{msg['app_title']}" />
	



	
	
	

Básicamente lo que se pretende con este código es asociar un evento de cambio de valor al componente siempre que el navegador no sea IE. Si el navegador es IE lo que se hace es asociar un evento click para que en ambos navegadores el comportamiento del componente sea el mismo.

En las lineas 3 y 4 se hace referencia a las URL’s de los distintos tags que vamos a utilizar a nivel de presentación. La mayoria son los de siempre pero cabe destacar «http://java.sun.com/jsp/jstl/functions». Para completar correctamente el ejemplo es necesario hacer uso de de una función pasandole como parámetro un atributo de la cabecera de la petición.

En la línea 18 vemos como hacer uso de la función containsIgnoreCase pasandole como parámetro el atributo User-Agent de la cabecera y el valor por el que lo queremos comparar. Esto devolvera true si el User-Agent de la cabecera contiene la cadena MSIE y false en caso contrario. Además hacemos uso del if de JSTL para evaluar el resultado de la función de EL.

Ahora si comprobáis el comportamiento de esta página en ambos navegadores podréis ver que es exactamente el mismo.Eso si cuando hagamos uso de IE la pantalla renderizará un componente con el evento «click» y cuando sea otro navegador se renderizará el componente con el evento «change».

5. Conclusiones.

Seguramente alguno de vosotros estará pensando que no es necesario todo esto para el caso que os he propuesto. Pues bien, nos os falta razón ya que conociendo el comportamiento del componente en IE podríamos haber utilizado el evento «click» y funcionaría correctamente en ambos navegadores pero no quería dejar pasar esta oportunidad de daros a conocer un poquito más acerca de JSTL y EL ya que en más de una ocasión me ha sido verdaderamente útil para resolver ciertas dificultades a nivel de presentación. Por este motivo os recomiendo que le echéis una ojeada al siguiente enlace Expression Language Specification -Version 2.1 para aprender un poco más a fondo como JSTL y EL pueden beneficiaros en vuestros desarrollos.

Espero que les sirva de utilidad.

Un saludo.

Saúl

mailto:sgdiaz@autentia.com

2 COMENTARIOS

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad