"El diseño es el embajador silencioso de tu marca"
- Paul Brand

Empezando con JSTL

En el ámbito de la maquetación, si hay algo que se agradece a la hora de construir una página es poder hacerla más modular y legible, cuando estamos desarrollando en Java, concretamente en J2EE una de las cosas que nos van a ayudar a hacerlo son librerías como la JSTL (JSP Standard Tag Library).

¿Qué me ofrece el JSTL?

Para definirlo de forma rápida, JSTL es un conjunto de 5 librerías de etiquetas, etiquetas donde se encapsulan las funciones que habitualmente usamos cuando escribimos páginas JSP, por ejemplo bucles, operaciones o formateos de fechas…

Habitualmente usamos un scriptlet para hacer estas cosas, el problema y la ventaja de los scriptlets es que abrimos una llave empezamos a escribir y hacemos lo que queremos, es java puro y duro, lo mismo que escribiríamos en un controlador.

Digo que es una ventaja porque nos permite hacer cualquier cosa en java en su interior, el problema es que cada uno ordena ese código como le da la gana y es solo valido para esa JSP, de manera que empeora la legibilidad muchísimo y si se nos va la mano hace la página inmantenible para el que no la hizo (que es el problema que tuvimos todos los que empezamos a programar en php a lo bruto y sin saber, que abríamos un <?php … ?> donde nos daba la gana y tirábamos ahí toda la lógica).

Para evitar que recurramos al scriptlet por cualquier chorrada, JSTL encapsula las cosas más cotidianas que hacemos en vista y nos las ofrece en forma de etiqueta, esto es a grandes rasgos su principal utilidad.

Decíamos que se dividía en 5 librerías, estas son…

  • core: En ella encontramos las funciones básicas para hacer iteraciones, condicionales, manipular urls, etc.
  • xml: Abarca el procesamiento y transformación de xml.
  • fmt: Comprende la internacionalización y formato de valores como de moneda y fechas.
  • sql: Abarca el acceso y gestión de la base de datos.
  • functions: Tiene funciones para evaluar el número de elementos de un array, devolver parte de un string o reemplazar cadenas, quitar espacios, transformar a mayúsculas o minúsculas, etc.

Para importarlas solo tenemos que llamar a sus correspondientes taglib al abrir la página:

core: <%@ taglib prefix=»c» uri=»http://java.sun.com/jstl/core» %>
xml: <%@ taglib prefix=»x» uri=»http://java.sun.com/jstl/xml» %>
fmt: <%@ taglib prefix=»fmt» uri=»http://java.sun.com/jstl/fmt» %>
sql: <%@ taglib prefix=»sql» uri=»http://java.sun.com/jstl/sql» %>
functions: <%@ taglib prefix=»fn» uri=»http://java.sun.com/jsp/jstl/functions» %>

(Esta es la forma habitual de llamarlas, la uri es la que nos da oracle, el prefijo se lo podrías cambiar al que tú prefieras…)

Yo habitualmente miro si JSTL me proporciona una etiqueta para hacer lo que necesito en esta pagina, aunque esta en ingles se entiende perfectamente para que sirve cada cosa, al fin y al cabo son cosas muy generales que se llaman como en el resto de los lenguajes.

Ejemplo de uso

No voy a analizar todas las etiquetas que nos dan estas librerías pero para hacernos una idea de cómo funciona veamos cómo podemos usar algunas de las que ofrece el core, este es el scriptlet que vamos a sustituir…

<%@ page import="com.oscarlijo.model.Usuarios, java.util.*"%>

  <h1>Listado de Usuarios</h1>

  <%
  List usuarios = (List)request.getAttribute("usuarios");
  Iterator usuariosIter = usuarios.iterator();

    while(usuariosIter.hasNext()) {
      Usuarios usuario = (Usuarios)usuariosIter.next();
      if((null != usuario) && (null != usuario.getName()) && (usuario.getName().length() > 0)) {
  %>
        <p><%=usuario.getName()%></p><br>
  <%
      } else {
  %>
        <p>Usuario no disponible</p><br>
  <%  
      }
    }
  %>

En este scriptlet, que podría estar en cualquier JSP, hacemos varias cosas, en primer lugar arriba estamos importándonos el objeto Usuarios de nuestro modelo y también las librerías de java util para poder tratarlo.
Una vez que tenemos eso recogemos el atributo «usuarios» que nos estará llegando desde nuestro controlador y lo metemos en un listado que después recorreremos mediante el uso de un iterador.

Una vez empezamos a iterar hacemos dos cosas con el elemento, primero lo casteamos contra nuestro objeto y después comprobamos que no sea nulo y que la variable nombre ni sea nula ni este vacía, si todo es correcto la imprimimos en pantalla y sino mostramos un mensaje diciendo que no está disponible…

Ahora veamos cómo se hace esto con JSTL

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<p><h1>Customer Names</h1></p>

<c:forEach items="${usuarios}" var="usuario">
  <c:choose>
    <c:when test="${not empty usuario.Name}" >
      <p><c:out value="${usuario.Name}"/></p><br>
    </c:when>
    <c:otherwise>
      <p>Usuario no disponible</p><br>
    </c:otherwise>
  </c:choose>
</c:forEach>

Bastante más cómodo y mucho más legible y mantenible, sobre todo si se lo damos a alguien que es mas de front-end y no se maneja tanto en Java.

The following two tabs change content below.
Especialista en diseño web responsive, programador html5, css3, jquery, php y java.

Latest posts by Óscar Lijó (see all)