Diferencia entre revisiones de «JSTL»

De Dos Ideas.
Saltar a: navegación, buscar
(Condiciones)
Línea 109: Línea 109:
  
 
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.
 
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.
 
+
<pre>
 +
<nowiki>
 
     <c:forEach var="nave" items="${invasor.naves}">
 
     <c:forEach var="nave" items="${invasor.naves}">
 
         Modelo: ${nave.modelo}
 
         Modelo: ${nave.modelo}
Línea 115: Línea 116:
 
         <br/>
 
         <br/>
 
     </c:forEach>
 
     </c:forEach>
 
+
<nowiki>
 +
</pre>
  
 
==Ver también==
 
==Ver también==

Revisión del 15:38 27 jul 2008

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.

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.

<nowiki>
    <c:forEach var="nave" items="${invasor.naves}">
        Modelo: ${nave.modelo}
        Nombre: ${nave.nombre}
        <br/>
    </c:forEach>
<nowiki>

Ver también