• Aucun résultat trouvé

JSTL xml : exercice d'application

La bibliothèque xml n'a maintenant plus de secrets pour vous. Mais si vous souhaitez vous familiariser avec toutes ces nouvelles balises et être à l'aise lors du développement de pages JSP, vous devez vous entrainer !

Je vous propose ici un petit exercice d'application qui met en jeu des concepts réalisables à l'aide des balises que vous venez de découvrir. Suivez le guide...

Les bases de l'exercice

On prend les mêmes et on recommence...

Pour mener à bien ce petit exercice, commencez par créer un nouveau projet nommé jstl_exo2. Configurez bien entendu ce projet en y intégrant la JSTL, afin de pouvoir utiliser nos chères balises dans nos pages JSP !

Une fois ceci fait, créez pour commencer un document XML. Je vous en donne ici le contenu complet : Code : XML - inventaire.xml

<?xml version="1.0" encoding="utf-8"?>

<inventaire> <livre>

<auteur>Pierre</auteur>

<titre>D&#233;veloppez vos applications web avec JRuby !</titre> <date>Janvier 2012</date> <prix>22</prix> <stock>127</stock> <minimum>10</minimum> </livre> <livre> <auteur>Paul</auteur>

<titre>D&#233;couvrez la puissance du langage Perl</titre> <date>Avril 2017</date> <prix>26</prix> <stock>74</stock> <minimum>10</minimum> </livre> <livre> <auteur>Matthieu</auteur>

<titre>Apprenez &#224; programmer en C</titre> <date>Novembre 2009</date> <prix>25</prix> <stock>19</stock> <minimum>20</minimum> </livre> <livre> <auteur>Matthieu</auteur>

<titre>Concevez votre site web avec PHP et MySQL</titre> <date>Mars 2010</date> <prix>30</prix> <stock>7</stock> <minimum>20</minimum> </livre> <livre> <auteur>Cysboy</auteur>

<titre>La programmation en Java</titre> <date>Septembre 2010</date> <prix>29</prix> <stock>2000</stock> <minimum>20</minimum> </livre> </inventaire>

Ne prêtez pas grande attention aux données modélisées par ce document. Nous avons simplement besoin d'une base simple, contenant de quoi nous amuser un peu avec les balises que nous venons de découvrir !

Note : toute ressemblance avec des personnages existant ou ayant existé serait fortuite et indépendante de la volonté de l'auteur...

Votre mission maintenant, c'est d'écrire la page rapportInventaire.jsp se chargeant d'analyser ce document XML, et de générer un rapport qui :

listera chacun des livres présents ;

affichera un message d'alerte pour chaque livre dont le stock est en dessous de la quantité minimum spécifiée ; listera enfin chacun des livres présents, regroupés par stocks triés du plus grand au plus faible.

Il y a plusieurs manières de réaliser ces tâches basiques, choisissez celle qui vous semble la plus simple et logique. Prenez le temps de chercher et de réfléchir, et on se retrouve ensuite pour la correction !

Correction

Ne vous jetez pas sur la correction sans chercher par vous-mêmes : cet exercice n'aurait alors plus aucun intérêt. Je ne vous donne ici pas d'aide supplémentaire, si vous avez suivi le cours jusqu'ici vous devez être capables de comprendre comment faire, les balises nécessaires pour cet exercice ressemblant fortement à celles utilisées dans celui concernant la bibliothèque Core ! Voici donc une correction possible :

Secret (cliquez pour afficher)

Code : JSP

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

<!DOCTYPE html>

<html> <head>

<meta charset="utf-8" />

<title>Rapport d'inventaire</title> </head>

<body>

<%-- Récupération du document XML. --%>

<c:import url="inventaire.xml" var="documentXML" /> <%-- Analyse du document XML récupéré. --%>

<x:parse var="doc" doc="${documentXML}" /> <p><b>Liste de tous les livres :</b></p> <div>

<ul>

<%-- Parcours du document parsé pour y récupérer chaque noeud "livre". --%>

<x:forEach var="livre" select="$doc/inventaire/livre"> <%-- Affichage du titre du livre récupéré. --%>

<li><x:out select="$livre/titre" /></li> </x:forEach>

</ul> </div>

<p><b>Liste des livres qu'il faut réapprovisionner :</b></p> <div>

<ul>

<%-- Parcours du document parsé pour y récupérer chaque noeud "livre"

dont le contenu du noeud "stock" est inférieur au contenu du noeud

"minimum". --%>

<x:forEach var="livre" select="$doc/inventaire/livre[stock < minimum]">

<%-- Affichage des titres, stocks et minimaux du livre récupéré. --%>

<li><x:out select="$livre/titre" /> : <x:out

select="$livre/stock" /> livres en stock (limite avant alerte : <x:out select="$livre/minimum" />)</li>

</x:forEach> </ul>

</div>

<p><b>Liste des livres classés par stock :</b></p> <%-- Il faut réfléchir... un peu ! --%>

<pre>

Le tri d'une liste, d'un tableau, d'une collection... bref de manière générale le tri de données,

ne doit pas se faire depuis votre page JSP ! Que ce soit en utilisant les API relatives aux collections,

ou via un bean de votre couche métier, ou que sais-je encore, il est toujours préférable que votre tri

soit effectué avant d'arriver à votre JSP. La JSP ne doit en principe que récupérer cette collection déjà triée,

formater les données pour une mise en page particulière si nécessaire, et seulement les afficher.

C'était un simple piège ici, j'espère que vous avez réfléchi avant de tenter d'implémenter un tri avec

la JSTL, et que vous comprenez pourquoi cela ne doit pas intervenir à ce niveau ;)

</pre> </body> </html>

Je n'ai fait intervenir ici que des traitements faciles, n'utilisant que des boucles et des expressions XPath. J'aurais pu vous imposer l'utilisation de tests conditionnels, ou encore de variables de scope, mais l'objectif est ici uniquement de vous permettre d'être à l'aise avec l'analyse de document XML. Si vous n'êtes pas parvenus à réaliser ce simple traitement de document, vous devez identifier les points qui vous ont posé problème et revoir le cours plus attentivement !

N'hésitez pas à travailler davantage, à tenter de développer d'autres fonctionnalités de votre choix. Vous pouvez par exemple faire intervenir des transformations XSL sur le document XML.