JSTL
Java Standard Tag Library (JSTL) es un conjunto de tags JSP que resuelven las situaciones más comunes de presentación. JSTL provee tags para setear, obtener y mostrar variables del entorno, iterar colecciones, crear condiciones lógicas y formatear fechas y números, entre otras cosas.
JSTL comienza a ser sumamente útil cuando se combina con un nuevo lenguaje de expresiones para JSP: Expression Language (EL). EL es una nueva 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 la presentación en los JSP.
JSTL es la opción preferida para resolver la presentación en los proyectos web con Web Logic 9 que tengamos. A continuación una breve introducción.
Contenido
Una página de ejemplo
El objeto de dominio en el request
Para el ejemplo usaremos el siguiente objeto de dominio, que deberemos mostrar en una página.
public class Invasor { private Long id; private String nombre; private Date fechaReclutamiento; private boolean esCapitan; private Collection<Nave> naves;
//getters y setters a continuación }
Para el ejemplo presupondremos que existe una instancia de Invasor subida al request bajo el nombre "invasor Activo".
Importando JSTL en la página
Para usar JSTL es necesario incluir los siguientes JAR al proyecto:
- standard.jar
- jstl.jar
Estos JAR son solamente necesarios para que los IDE compilen las páginas, y no deben quedar en los distribuibles (ya que el application server los proveerá en tiempo de ejecución).
JSTL está compuesto por un conjunto de tags separados en diferentes TLDs. Los dos grupos de tags principales son:
- Core (prefijo "c"): funcionalidad básica, como seteo de variables, iteraciones de colecciones, lógica, etc.
- Format (prefijo "fmt"): utilidades para formateo de fechas y números.
Pueden ver todos los grupos y URIs correspondientes a cada uno en standard.jar/META-INF (allí se encuentran todos los TLD).
Finalmente, para importar estos tags en nuestro JSP quedaría el siguiente código:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt" %>
EL para referenciar objetos
EL permite referenciar atributos y objetos a través de sus nombres de variables. Las expresiones EL cumplen la forma:
${expresion}
Por ejemplo, si tuvieramos una variable "invasor" definida, podriamos hacer referencia a su nombre:
${invasor.nombre}
O crear una condición lógica:
${invasor.esCapitan == false}
Pero primero deberemos definir nuestra variable "invasor" antes de utilizarla.
Creando una variable
Usaremos EL para mostrar los atributos de nuestro invasor. Sin embargo, primero deberemos crear una variable local que contenga una referencia al invsasor en el request. Para esto, usaremos el tag "set" provisto por JSTL:
<c:set var="invasor" value="${requestScope[['invasorActivo']}"/>
Noten, este tag utiliza EL para hacer referencia al objeto "invasorActivo" del request. La variable "requestScope" es implícita Mostrando atributos
Mostrar atributos en el JSP es tan simple como referenciar a los atributos con EL.
Por ejemplo, supongamos que queremos armar un pequeño HTML para mostrar los datos del Invasor en cuestión:
ID: ${invasor.id}
Nombre: ${invasor.nombre}
Formateando atributos
Usando los tags "fmt" podremos darle formato a números y fechas:
Reclutado el <fmt:formatDate dateStyle="short" value="${invasor.fechaReclutamiento}"/>
Condiciones
Además, es posible crear bloques con condiciones lógicas. Para esto se utiliza el tag "if", el cual ejecuta el bloque que contiene si su condición da verdadero.
<c:if test="${invasor.esCapitan == true}"> Este invasor es Capitan de una nave. </c:if> <c:if test="${persona.esMayorDeEdad == false}"> Este invasor es un soldado. </c:if>
Se pueden crear condiciones múltiples con el tag "choose". Este tag permite evaluar varias condiciones. El mismo bloque anterior reescribo con choose sería:
<c:choose> <c:when test="${invasor.esCapitan}"> La persona es mayor de edad. </c:when> <c:otherwise> La persona es menor de edad. </c:otherwise> </c:choose>
Cuando existe más de una rama de decisión, el tag "choose" es mucho más práctico. Iterando colecciones
Los tags "core" traen tambien utilidades para recorrer colecciones facilmente. Recorreremos la colección de naves que tiene el Invasor usando el tag "forEach", y mostraremos su modelo y nombre.
<c:forEach var="nave" items="${invasor.naves}"> Modelo: ${nave.modelo} Nombre: ${nave.nombre}
</c:forEach>
Conclusión
JSTL y EL proveen una forma muy simple de resolver la lógica de presentación en los JSP.
Más información
Existe muchísima información y tutoriales en internet sobre JSTL. Como siempre, Google es su amigo! Algunos links interesantes: