JSTL
JSP (Standard Tag Library) es un conjunto de etiquetas organizadas en 4 grupos distintos, las cuales tienen como propósito fundamental evitar que el programador introduzca código Java (scriptlets) en las paginas JSP.
Mezclar JSP y HTML es desordeando, y pesado. JSTL es simple y mejora la lógica de las vistas.
Los cuatro grupos de librerías JSTL, son: core, fmt, sql y xml.
Etiquetas core
- Debemos añadir la librería JSTL a nuestro proyecto.
- Debemos añadir la siguiente etiqueta en la cabecera de los ficheros JSP:
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
Disponemos de las siguientes etiquetas:
Manipular variables y try...catch
Dichas etiquetas son : <c:out>, <c:set>, <c:remove> y <c:catch>
Ejemplo de manipulación de variables:
<p>
<!-- Creamos la variable texto con un valor String -->
<c:set var="texto" value="valor_de_la_variable"/>
<!-- Mostramos el valor de la variable texto -->
El valor de la variable <b>texto</b> es : <c:out value="${texto}"/>
</p>
<p>
<!-- removemos la variable texto -->
<c:remove var="texto" scope="page"/>
<!-- Mostramos nuevamente el valor -->
El valor de la variable <b>texto</b> ahora es :
<c:out value="${texto}" default="Es Nulo"/>
</p><pre>
<h1>ddd</h1>
</pre>
Ejemplo try...catch:
<c:catch var="excepcion">
<%=3/0%>
</c:catch>
<c:if test="${excepcion != null }">
Ocurrió una excepción : <c:out value="${excepcion}"/>
</c:if>
Condicionales.
<c:if>, <c:choose>, <c:when> y <c:otherwise>
Ejemplo condicional (if, else):
<c:set var="a" value="20"/>
<c:if test="${a > 100}">
La variable <b></b> es <b>mayor</b> que 100.
</c:if>
<c:if test="${a < 100 }">
La variable <b></b> es <b>menor</b> que 100.
</c:if>
Ejemplo condicionales múltiples (if, else if, else):
<c:set var="a" value="50"/>
<c:choose>
<c:when test="${a == 1}">
<b>a</b> es 1.
</c:when>
<c:when test="${a == 2 }">
<b>a</b> es 2.
</c:when>
<c:otherwise>
<b>a</b> tiene un valor diferente de 1 y de 2.
</c:otherwise>
</c:choose>
Bucles:
Etiquetas <c:forEach> y <c:forTokens>
Ejemplo para recorrer una lista:
<p>
<c:forEach var="nombre" items="${listaDeNombres}">
<b><c:out value="${nombre}"/></b> <br/>
</c:forEach>
</p>
<!-- O con objetos -->
<p>
<c:forEach var="objeto" items="${objetos}">
<b><c:out value="${objeto.atributo}"/></b> <br/>
</c:forEach>
</p>
Etiquetas de importación y mnipulación de URL's
Etiquetas: <c:import>, <c:url>, <c:redirect> y <c:param>
<c:import url="nuevaJSP.jsp"/>
Las otras tres sirven para configurar mostrar urls con parámetros y par forzar el reenvío a otras direcciones con parámetros:
<!-- reenvio a la url nuevaJSP.jsp?nombre=Juan -->
<c:redirect url="nuevaJSP.jsp">
<c:param name="nombre" value="Juan"/>
</c:redirect>
Etiquetas de formato: fmt
- Debemos añadir al inicio de nuestro jsp la siguiente etiqueta:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
- Para formatear un número usamos formatNumber con los atributos number para el número y pattern para el patrón de formateo a aplicar.
<fmt:formatNumber value="1000.001" pattern="#,#00.0#"/>
Si queremos parsear un número a partir de un string usamos parseNumber:
<fmt:parseNumber value="${currencyInput}" type="currency" var="parsedNumber"/>
Para formatear una fecha usamos formatDate y para parsear un string parseDate:
<jsp:useBean id="now" class="java.util.Date" /> <fmt:formatDate value="${now}" timeStyle="long" dateStyle="long"/> <fmt:formatDate value="${now}" pattern="MM dd, YYYY" /> <fmt:parseDate value="${dateInput}" pattern="MM dd, YYYY" />