El mejor método de programación JSP: Utilizar JSTL en lugar del código Java

JavaServer Pages Standard Tag Library (JSTL) es un grupo de códigos JSP que proporciona las funciones estándar que suelen buscar los autores de páginas JSP. JSTL tiene soporte para las condiciones, iteración, formato sensible al entorno local, etc. También tiene un lenguaje de expresiones (EL) que permite a los autores de páginas controlar el modo en que se recuperan y visualizan los datos.

Las páginas JSP de la tienda deben contener algún código Java o ninguno en favor de JSTL: Cualquier lógica empresarial se debería delegar a beans de datos aptos para páginas y la lógica de presentación restante se debería implementar en JSTL

Hay dos versiones de JSTL: Basado en EL (lenguaje de expresiones) y basado en RT (expresión de tiempo de solicitud). En HCL Commerce, se debe utilizar JSTL basado en EL.

JSTL 1.0 consta de cuatro áreas funcionales, que se exponen como bibliotecas de etiquetas independientes con sus propios espacios de nombres:
  • Datos básicos
  • Proceso XML
  • Formato con posibilidad I18N (internacionalización)
  • Acceso a base de datos relacional (SQL)

Dado que bajo el modelo de programación de HCL Commerce, los beans de datos constituyen el único mecanismo de acceso a datos soportado para páginas JSP, las etiquetas de la biblioteca SQL no se deben utilizar not.

Los ejemplos siguientes demuestran cómo se puede utilizar JSTL para sustituir el código Java.

Este primer ejemplo presupone que hay un bean de datos de producto disponible para la página JSP y lo utiliza para visualizar el precio mínimo de artículo del producto si está disponible y, en caso contrario, la serie No disponible.

Utilizando Java, esta tarea se puede realizar mediante el acceso directo al bean de datos y a los métodos de objeto, del modo siguiente:

<% if (productDataBean.getMinimumItemPrice() != null) { %>
    <%= productDataBean.getMinimumItemPrice() %>
<% } else { %>
    <%=storetext.getString("NO_PRICE_AVAILABLE")%>
<% } %>

Utilizando JSTL, la misma tarea puede llevarse a cabo mediante los códigos

<c:out>

and

<fmt:message>

del modo siguiente:

<c:out value="${productDataBean.minimumItemPrice}">
        <fmt:message key="NO_PRICE_AVAILABLE"
bundle="${storeText}" />
</c:out>

(El código <c:out> genera la salida resultante de evaluar su parámetro value o, si es nulo, el valor que se proporciona en su texto. El código <fmt:message> recupera la versión específica del entorno local de un mensaje desde un paquete de recursos.)

El siguiente ejemplo presupone que un bean de datos de categoría está disponible en la página JSP y lo utiliza para visualizar el nombre y el precio de cada producto de la categoría.

Utilizando Java, esta tarea se puede realizar mediante el acceso directo al bean de datos y a los métodos de objeto junto con los recursos de control Java, como se indica a continuación:

<% ProductDataBean[] products = categoryDataBean.getProducts();
for (int i=0; i < products.length; i++) {
%>
<%= products[i].getDescription().getName() %>
<% if (products[i].getMinimumItemPrice() != null) { %>
    <%= products[i].getMinimumItemPrice() %>
<% } else { %>
    <%=storetext.getString("NO_PRICE_AVAILABLE")%>
<% } 
}
%>

Utilizando JSTL, la misma tarea puede llevarse a cabo mediante los códigos

<c:foreach>

,

<c:out>

y

<fmt:message>

junto con los recursos de lenguaje de expresión JSTL tal como se muestra a continuación:


<c:forEach var="product"
items="${categoryDataBean.products}">
    <c:out value="${product.description.name}" />
    <c:out value="${product.minimumItemPrice}">
        <fmt:message key="NO_PRICE_AVAILABLE"
bundle="${storeText}" />
    </c:out>
</c:forEach>

Observe que la presentación JSTL de ambos ejemplos es más compacta y más fácil de comprender.