Meilleures pratiques de programmation JSP : Utiliser JSTL à la place du code Java

JavaServer Pages Standard Tag Library (JSTL) est une collection de balises JSP qui fournissent les fonctionnalités standard les plus fréquemment recherchées par les auteurs de pages JSP. JSTL prend en charge les conditions, l'itération, la mise en forme sensible aux paramètres régionaux, et ainsi de suite. Il dispose également d'un langage d'expression (EL) qui permet aux auteurs de pages de contrôler la façon dont les données sont récupérées et affichées.

Stocker les pages JSP doit contenir peu ou pas de code Java en faveur de JSTL : toute logique commerciale devrait être déléguée aux beans de données adaptés aux pages, et la logique de présentation restante devrait être implémentée dans JSTL.

Il existe deux versions de JSTL : basée sur EL (langage d'expression) et basée sur RT (expression requête-temps). Pour HCL Commerce, JSTL à base d'EL doit être utilisé.

JSTL 1.0 se compose de quatre zones fonctionnelles, qui sont exposées comme bibliothèques de balises séparées avec leurs propres espaces de noms :
  • Principale
  • Traitement XML
  • Formatage compatible I18N (internationalisation)
  • Accès relationnel à la base de données (SQL)

Etant dit que, dans le modèle de programmation HCL Commerce, les beans de données constituent le seul mécanisme d'accès aux données pris en charge pour les pages JSP, les balises de bibliothèque SQL ne doivent not être utilisées.

Les exemples suivants montrent comment JSTL peut être utilisé pour remplacer le code Java.

Ce premier exemple suppose qu'un bean de données de produit est disponible sur la page JSP et l'utilise pour afficher le prix minimum de l'article du produit s'il est disponible et la chaîne Indisponible dans le cas contraire.

En utilisant Java, cette tâche peut être accomplie au moyen d'un accès direct aux méthodes de bean et d'objet de données comme suit :

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

En utilisant JSTL, la même tâche peut être accomplie au moyen des balises

<c:out>

et

<fmt:message>

comme suit :

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

(La balise <c:out> produit le résultat de l'évaluation de son paramètre de valeur ou, si celui-ci est nul, la valeur fournie dans son corps. La balise <fmt:message> récupère la version spécifique aux paramètres régionaux d'un message à partir d'un regroupement de ressources.)

Cet exemple suivant suppose qu'un bean de données de catégorie est disponible sur la page JSP et l'utilise pour afficher le nom et le prix de chaque produit de la catégorie.

En utilisant Java, cette tâche peut être accomplie au moyen d'un accès direct aux méthodes de bean et d'objets de données en conjonction avec les installations de contrôle Java comme suit :

<% 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")%>
<% } 
}
%>

En utilisant JSTL, la même tâche peut être accomplie au moyen des balises

<c:foreach>

,

<c:out>

et

<fmt:message>

en conjonction avec les installations de langage d'expression JSTL comme suit :


<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>

Vous constatez que le rendu JSTL des deux exemples est à la fois plus compact et plus facile à comprendre.