Guide de la bibliothèque JSTL

Un guide de la bibliothèque JSTL

1. Vue d'ensemble

La bibliothèque de balises de pages JavaServer (JSTL) est un ensemble de balises pouvant être utilisées pour la mise en oeuvre d'opérations courantes telles que la mise en boucle, la mise en forme conditionnelle, etc.

Dans ce didacticiel, nous allons expliquer comment configurer JSTL et comment utiliser ses nombreuses balises.

2. Installer

Pour activer les fonctionnalités JSTL, nous devrons ajouter la bibliothèque à notre projet. Pour un projet Maven, nous ajoutons la dépendance dans le fichierpom.xml:


    javax.servlet
    jstl
    1.2

Avec la bibliothèque ajoutée à notre projet, la configuration finale consistera à ajouter la balise JSTL principale et le fichier d’espace de noms de toute autre balise à notre JSP en utilisant la directive taglib comme ceci:

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

Ensuite, nous examinerons ces balises qui sont globalement regroupées en cinq catégories.

3. Tags de base

La bibliothèque de balises de base JSTL contient des balises pour effectuer des opérations de base telles que l'impression de valeurs, la déclaration de variables, la gestion des exceptions, l'exécution d'itérations et la déclaration d'instructions conditionnelles, entre autres.

Jetons un coup d'œil aux balises principales.

3.1. La balise<c:out>

<c:out> est utilisé pour afficher les valeurs contenues dans les variables ou le résultat d'une expression implicite.

Il a trois attributs:value, default, and escapeXML. L'attributescapeXML génère des balises XML brutes contenues dans l'attributvalue ou son boîtier.

Un exemple de balise<c:out> sera:

3.2. La balise<c:set>

La balise<c:set> est utilisée pour déclarer des variables de portée dans JSP. On peut également déclarer le nom de la variable et sa valeur dans les attributsvar etvalue respectivement.

Un exemple sera de la forme:

3.3. La balise<c:remove>

La balise<c:remove> supprime les variables de portée, ce qui équivaut à affecternull à une variable. Il prend l'attributvar etscope avecscope ayant une valeur par défaut de toutes les étendues.

Ci-dessous, nous montrons un exemple d'utilisation de la balise<c:remove>:

3.4. La balise<c:catch>

La balise<c:catch> intercepte toute exception lancée dans son enceinte. Si l'exception est levée, sa valeur est stockée dans l'attributvar de cette balise.

L'utilisation typique pourrait ressembler à:


    <% int x = Integer.valueOf("a");%>

Et pour vérifier si l'exception est levée, nous utilisons la balise<c:if> comme indiqué ci-dessous:


    

The exception is : ${exceptionThrown}
There is an exception: ${exceptionThrown.message}

3.5. La balise<c:if>

Le<c:if> est une balise conditionnelle qui affiche ou exécute ses scriptlets inclus uniquement lorsque son attributtest est évalué à true. Le résultat de l'évaluation peut être stocké dans son attributvar.

3.6. Balises<c:choose>,<c:when> et<c:otherwise>

Le<c:choose> est une balise parent qui est utilisée pour exécuter des expressions de type switch ou if-else. Il a deux sous-étiquettes; <c:when> et<c:otherwise> qui représentent respectivement if / else-if et else.

<c:when> prend un attributtest qui contient l'expression à évaluer. Ci-dessous, nous présentons un exemple d'utilisation de ces balises:



    
        
    
    
        
    
    
        
    

3.7. La balise<c:import>

La balise<c:import> gère la récupération et l'exposition du contenu à partir d'URL absolues ou relatives.

Nous pouvons utiliser les attributsurl etvar pour contenir respectivement l'URL et le contenu extrait de l'URL. Par exemple, nous pourrions importer le contenu d'une URL en:

3.8. La balise<c:forEach>

La balise<c:forEach> est similaire à la syntaxe Java for, while ou do-while. L'attributitems contient la liste des éléments à itérer, tandis que les attributsbegin etend contiennent respectivement l'index de début et de fin (indexation nulle).

La balise<c:forEach> possède également un attributstep qui contrôle la taille de l'incrément d'index après chaque itération. Ci-dessous, nous montrons un exemple d'utilisation:


    Item 

3.9. La balise<c:forTokens>

La balise<c:forTokens> est utilisée pour diviser unString en jetons et les parcourir.

Semblable à la balise<c:forEach>, elle a un attributitems et un attributdelim supplémentaire qui est le délimiteur pour lesString comme ceci:


    

3.10. Balises<c:url> et<c:param>

La balise<c:url> est utile pour formater une URL avec un encodage de requête approprié. l'URL formatée est stockée dans l'attributvar.

La balise<c:url> a également une sous-étiquette<c:param> qui est utilisée pour spécifier les paramètres d'URL. Nous montrons un exemple ci-dessous:


    
    

3.11. La balise<c:redirect>

La balise<c:redirect> effectue une réécriture d'URL et redirige l'utilisateur vers la page spécifiée dans son attributurl. Un cas d'utilisation typique ressemblera à ceci:

4. Formatage des balises

La bibliothèque de balises de formatage JSTL fournit un moyen pratique de formater le texte, les nombres, les dates, les heures et d'autres variables pour un meilleur affichage.

Les balises de formatage JSTL peuvent également être utilisées pour améliorer l'internationalisation d'un site Web.

Avant d'utiliser ces balises de mise en forme, nous devons ajouter le taglib à notre JSP:

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

Identifions les différentes balises de mise en forme et comment elles peuvent être utilisées.

4.1. La balise<fmt:formatDate>

La balise<fmt:formatDate> est utile pour formater les dates ou l'heure. L'attributvalue contient la date à mettre en forme et l'attributtype prend l'une des trois valeurs; date, time or both.

<fmt:formatDate> a également un attributpattern où nous pouvons spécifier le modèle de formatage souhaité. Voici un exemple de l'un des modèles:


4.2. La balise<fmt:parseDate>

La balise<fmt:parseDate> est similaire à la balise<fmt:formatDate>.

La différence est qu'avec la balise<fmt:parseDate>, nous pouvons spécifier le modèle de mise en forme dans lequel l'analyseur de date sous-jacent doit s'attendre à ce que la valeur de date soit.

Nous pouvons analyser les dates:


4.3. La balise<fmt:formatNumber>

La balise<fmt:formatNumber> gère le rendu des nombres dans un modèle ou une précision spécifique qui peut être l'un desnumber, currency or percentage comme spécifié dans son attributtype. Un exemple d'utilisation de<fmt:formatNumber> serait:


4.4. La balise<fmt:parseNumber>

La balise<fmt:parseNumber> est similaire à la balise<fmt:formatNumber>. La différence est qu'avec la balise<fmt:parseNumber>, nous pouvons spécifier le modèle de formatage dans lequel l'analyseur de nombres sous-jacent devrait s'attendre à ce que le nombre se trouve.

Nous pourrions utiliser ceci comme:

4.5. La balise<fmt:bundle>

La balise<fmt:bundle> est une balise parent pour la balise<fmt:message>. <fmt:bundle> transforme le bundle spécifié dans son attributbasename en balises<fmt:message> incluses.

La balise<fmt:bundle> est utile pour activer l'internationalisation car nous pouvons spécifier des objets spécifiques aux paramètres régionaux. L'utilisation typique sera de la forme:


    



4.6. La balise<fmt:setBundle>

La balise<fmt:setBundle> est utilisée pour charger un ensemble de ressources dans JSP et le rendre disponible sur toute la page. Le groupe de ressources chargé est stocké dans l'attributvar de la balise<fmt:setBundle>. Nous pouvons définir un forfait par:

4.7. La balise<fmt:setLocale>

La balise<fmt:setLocale> est utilisée pour définir les paramètres régionaux des sections dans JSP placées après sa déclaration. Typiquement nous allons définir ceci par:

fr_FR représente les paramètres régionaux qui sont français dans ce cas.

4.8. La balise<fmt:timeZone>

La balise<fmt:timeZone> est une balise parent qui spécifie le fuseau horaire à utiliser par toutes les actions de mise en forme ou d'analyse de l'heure par les balises dans son boîtier.

Ce paramètre de fuseau horaire est fourni par son attributvalue. Un exemple d'utilisation est présenté ci-dessous:


    

4.9. La balise<fmt:setTimeZone>

La balise<fmt:setTimeZone> peut être utilisée pour copier le fuseau horaire spécifié dans son attributvalue vers une variable de portée spécifiée dans son attributvar. Nous définissons cela par:

4.10. La balise<fmt:message>

La balise<fmt:message> est utilisée pour afficher le message d'internationalisation. L'identifiant unique du message à récupérer doit être passé à son attributkey.

Un bundle spécifique pour rechercher le message qui peut également être spécifié via l'attributbundle.

Cela peut ressembler à ceci:


4.11. La balise<fmt:requestEncoding>

La balise<fmt:requestEncoding> est utile pour spécifier le type de codage pour les formulaires avec un type d'actionpost.

Le nom du codage de caractères à utiliser est fourni via l'attributkey de la balise<fmt:requestEncoding>.

Voyons un exemple ci-dessous:

5. Balises XML

La bibliothèque de balises XML JSTL offre des moyens pratiques pour interagir avec des données XML dans un JSP.

Pour pouvoir accéder à ces balises XML, nous ajouterons la bibliothèque de balises à notre JSP en:

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

Examinons les différentes balises de la bibliothèque de balises XML JSTL.

5.1. La balise<x:out>

La balise<x:out> est similaire à la balise de scriptlet<%= %> dans JSP mais<x:out> est spécifiquement utilisée pour les expressions XPath.

La balise<x:out> a des attributsselect etescapeXML utilisés pour spécifier l'expression XPath pour évaluer unString et pour activer l'échappement des caractères XML spéciaux respectivement.

Un exemple simple est:

$output dans ce qui précède fait référence à un fichier XSL préchargé.

5.2. La balise<x:parse>

La balise<x:parse> est utilisée pour analyser les données XML spécifiées dans son attribut ou son boîtierxml oudoc __. Un exemple typique serait:

5.3. La balise<x:set>

La balise<x:set> définit la variable spécifiée dans son attributvar sur l'expression XPath évaluée transmise à son attributselect. Un exemple typique serait:

5.4. La balise<x:if>

La balise<x:if> traite son corps si l'expression XPath fournie à son attributselect prend la valeur true.

Le résultat de l'évaluation peut être stocké dans son attributvar.

Un cas d'utilisation simple ressemblera à:


    Document has at least one  element.

5.5. La balise<x:forEach>

La balise<x:forEach> est utilisée pour boucler sur les nœuds d'un document XML. Le document XML est fourni via l'attributselect de la balise<x:forEach>.

Tout comme la balise principale de<c:forEach>, la balise<x:forEach> a les attributsbegin, end etstep.

Ainsi, nous aurions:

  • Item Name:

5.6. Balises<x:choose>,<x:when> et<x:otherwise>

La balise<x:choose> est une balise parent qui est utilisée pour exécuter des expressions de type commutateur ou if / else-if / else et n'a pas d'attribut mais englobe les balises<x:when> et<x:otherwise>.

La balise<x:when> est similaire if / else-if et prend un attributselect qui contient l'expression à évaluer.

La balise<x:otherwise> est similaire à la clause else / default et n'a pas d'attribut.

Ci-dessous, nous présentons un exemple de cas d'utilisation:


    
        Item category is Sneakers
    
    
        Item category is Heels
    
    
       Unknown category.
    

5.7. Balises<x:transform> et<x:param>

La balise<x:transform> transforme un document XML dans JSP en lui appliquant un langage XSL (eXtensible Stylesheet Language).

Le document XML ouString à transformer est fourni à l'attributdoc tandis que le XSL à appliquer est passé à l'attributxslt de la balise<x:transform>.

La balise<x:param> est une sous-étiquette de la balise<x:transform> et elle est utilisée pour définir un paramètre dans la feuille de style de transformation.

Un cas d'utilisation simple sera de la forme:



    

6. Balises SQL

JSTL SQL tag library provides tags for performing relational database operations.

Pour activer les balises SQL JSTL, nous ajoutons la balise tag à notre JSP:

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

Les balises SQL JSTL prennent en charge différentes bases de données, notamment MySQL, Oracle et Microsoft SQL Server.

Ensuite, nous examinerons les différentes balises SQL disponibles.

6.1. La balise<sql:setDataSource>

La balise<sql:setDataSource> est utilisée pour définir les variables de configuration JDBC.

Ces variables de configuration sont contenues dans les attributsdriver, url, user, password etdataSource de la balise<sql:setDataSource> comme indiqué ci-dessous:

Dans ce qui précède, l'attributvar contient une valeur qui identifie la base de données associée.

6.2. La balise<sql:query>

La balise<sql:query> est utilisée pour exécuter une instruction SQL SELECT avec le résultat stocké dans une variable de portée définie dans son attributvar. En règle générale, nous définirons cela comme:


    SELECT * from USERS;

L'attributsql de la balise<sql:query> contient la commande SQL à exécuter. Les autres attributs incluentmaxRows,startRow etdataSource.

6.3. La balise<sql:update>

La balise<sql:update> est similaire à la balise<sql:query> mais n'exécute que les opérations SQL INSERT, UPDATE ou DELETE qui ne nécessitent pas de valeur de retour.

Un exemple d'utilisation serait:


    INSERT INTO USERS(first_name, last_name, email) VALUES
      ('Grace', 'Adams', '[email protected]');

L'attributvar de la balise<sql:update> contient le nombre de lignes affectées par l'instruction SQL spécifiée dans son attributsql.

6.4. La balise<sql:param>

La balise<sql:param> est une sous-balise qui peut être utilisée dans la balise<sql:query> ou<sql:update> pour fournir une valeur pour un espace réservé de valeur dans l'instruction sql comme suit:


    DELETE FROM USERS WHERE email = ?
    

La balise<sql:param> a un seul attribut; value qui contient la valeur à fournir.

6.5. La balise<sql:dateParam>

La balise<sql:dateParam> est utilisée dans la balise<sql:query> ou<sql:update> pour fournir une valeur de date et d'heure pour un espace réservé de valeur dans l'instruction sql.

Nous pouvons définir cela dans notre JSP comme ceci:


    UPDATE Users SET registered = ? WHERE email = ?
    
    

Comme la balise<sql:param>, la balise<sql:dateParam> a un attributvalue avec un attributtype supplémentaire dont la valeur peut être l'une desdate, time outimestamp ( date et l'heure).

6.6. La balise<sql:transaction>

La balise<sql:transaction> est utilisée pour créer une opération de type transaction JDBC en regroupant les balises<sql:query> et<sql:update> comme ceci:


    
        UPDATE Users SET first_name = 'Patrick-Ellis' WHERE
          email='[email protected]'
    
    
        UPDATE Users SET last_name = 'Nelson' WHERE
          email ='[email protected]'
    
    
        INSERT INTO Users(first_name, last_name, email)
          VALUES ('Grace', 'Adams', '[email protected]');
    

La balise<sql:transaction> garantit que toutes les opérations de base de données sont traitées avec succès (validées) ou échouent toutes correctement (annulées) si une erreur se produit dans l'une des opérations.

7. Fonctions JSTL

Les méthodes JSTL sont des utilitaires de manipulation de données au sein de JSP. Bien que certaines fonctions prennent différents types de données, la plupart d'entre elles sont dédiées à la manipulation deString.

Pour activer les méthodes JSTL dans JSP, nous ajouterons le taglib à notre page:

<%@ taglib prefix = "fn"
  uri = "http://java.sun.com/jsp/jstl/functions" %>

Examinons ces fonctions et comment les utiliser.

7.1. fn:contains() et fn: containsIgnoreCase ()

La méthodefn:contains() évalue unString pour vérifier s'il contient une sous-chaîne donnée comme ceci:



    

Found 'first' in string

La fonctionfn:contains() prend deux argumentsString; le premier est la sourceString et le second argument est la sous-chaîne. Il retourne un booléen en fonction du résultat de l'évaluation.

La fonctionfn:containsIgnoreCase() est une variante insensible à la casse de la méthodefn:contains() et peut être utilisée comme ceci:


    

Found 'first' string

Found 'FIRST' string

7.3. La fonctionfn:endsWith()

La fonctionfn:endsWith() évalue unString pour vérifier si son suffixe correspond à une autre sous-chaîne. Cela prend deux arguments; le premier argument est leString dont le suffixe doit être testé tandis que le second argument est le suffixe testé.

Nous pouvons définir ceci comme:


    

String ends with 'string'

7.4. La fonctionfn:escapeXml()

La fonctionfn:escapeXML() est utilisée pour échapper le balisage XML dans l'entréeString comme ceci:

${fn:escapeXml(string1)}

7.5. La fonctionfn:indexOf()

La fonctionfn:indexOf() regarde à travers unString et renvoie l'index de la première occurrence d'une sous-chaîne donnée.

Cela prend deux arguments; le premier est la sourceString et le second argument est la sous-chaîne à rechercher et renvoyer la première occurrence.

La fonctionfn:indexOf() renvoie un entier et peut être utilisée comme:

Index: ${fn:indexOf(string1, "first")}

7.6. La fonctionfn:join()

La fonctionfn:join() concatène tous les éléments d'un tableau en un seulString et peut être utilisée comme ceci:


7.7. La fonctionfn:length()

La fonctionfn:length() renvoie le nombre d'éléments dans la collection donnée ou le nombre de caractères dans lesString. donnés

La fonctionfn:length() prend un seulObject qui peut être une collection ou unString et renvoie un entier comme celui-ci:

Length: ${fn:length(string1)}

7.8. La fonctionfn:replace()

La fonctionfn:replace() remplace toutes les occurrences d'une sous-chaîne dans une chaîne par un autreString.

Il faut trois arguments; la sourceString,est la sous-chaîne à rechercher dans la source et lesString pour remplacer toutes les occurrences de la sous-chaîne comme ceci:

7.9. La fonctionfn:split()

La fonctionfn:split() effectue une opération de fractionnement sur unString en utilisant le délimiteur spécifié. Voici un exemple d'utilisation:

7.10. La fonctionfn:startsWith()

La fonctionfn:startsWith() vérifie le préfixe d'unString et renvoie true si elle correspond à une sous-chaîne donnée comme ceci:


    

String starts with 'This'

7.11. La fonctionfn:substring()

La fonctionfn:substring() crée une sous-chaîne à partir d'une sourceString aux index de début et de fin spécifiés. Nous l'utiliserions comme ceci:

7.12. La fonctionfn:substringAfter()

La fonctionfn:substringAfter() vérifie une sourceString pour une sous-chaîne donnée et renvoie lesString immédiatement après la première occurrence de la sous-chaîne spécifiée.

Nous l'utiliserions comme ceci:

7.13. La fonctionfn:substringBefore()

La fonctionfn:substringBefore() vérifie une sourceString pour une sous-chaîne donnée et renvoie lesString juste avant la première occurrence de la sous-chaîne spécifiée.

Dans notre page JSP, cela ressemblera à ceci:

7.14. La fonctionfn:toLowerCase()

La fonctionfn:to LowerCase() transforme tous les caractères d'unString en minuscules et peut être utilisée comme ceci:

7.15. La fonctionfn:toUpperCase()

La fonctionfn:toUpperCase() transforme tous les caractères d'unString en majuscules:

7.16. La fonctionfn:trim()

La fonctionfn:trim() supprime les espaces blancs précédents et finaux dans unString:

9. Conclusion

Dans cet article détaillé, nous avons examiné les différentes balises JSTL et comment les utiliser.

Comme d'habitude, des extraits de code peuvent être trouvésover on GitHub.