Exemple : Utilisation de la balise JSP tsx:repeat devant servir à l'itération dans un ensemble de résultats (obsolète)
La balise <tsx:repeat> itère sur un ensemble de résultats contenu dans un bean. Le bean peut être statique, par exemple un bean créé via l'Assistant de base de données IBM® WebSphere Studio, ou généré dynamiquement, par exemple, par la syntaxe <tsx:dbquery>.

Le tableau ci-après représente le contenu d'un bean appelé myBean :
Colonne | col1 | col2 | col3 |
---|---|---|---|
row0 | friends | Romans | countrymen |
row1 | bacon | lettuce | tomato |
row2 | May | June | July |
Quelques observations à propos de ce bean :
- Les noms des colonnes de la table de base de données deviennent les noms des propriétés du bean. La section <tsx:dbquery> décrit une technique de mappage des noms de colonne vers différents noms de propriété.
- Les propriétés du bean sont indexées. Par exemple, myBean.get(Col1(row2)) renvoie May.
- Les résultats de la requête figurent sur les lignes. La balise <tsx:repeat> tag itère sur les lignes, en commençant par la ligne de début.
Le tableau suivant établit la comparaison entre l'utilisation de la balise <tsx:repeat> pour effectuer une itération sur un bean statique et l'emploi de cette balise sur un bean généré dynamiquement :
Exemple de bean statique | <tsx:repeat> exemple de bean |
---|---|
myBean.class // Code pour obtenir une connexion // Code pour extraire les données Select * from myTable; // Code pour fermer la connexionFichier JSP <tsx:repeat index=abc> <tsx:getProperty name="myBean" property="col1(abc)" /> </tsx:repeat> Remarque :
|
Fichier JSP <tsx:dbconnect id="conn" userid="alice"passwd="test" url="jdbc:db2:sample" driver="COM.ibm.db2.jdbc.app.DB2Driver"> </tsx:dbconnect > <tsx:dbquery id="dynamic" connection="conn" > Select * from myTable; </tsx:dbquery> <tsx:repeat index=abc> <tsx:getProperty name="dynamic" property="col1(abc)" /> </tsx:repeat> Remarque :
|
Indexation implicite et explicite
Les exemples 1, 2 et 3 vous montrent comment utiliser la balise <tsx:repeat>. Ils produisent tous le même résultat si, au total, les propriétés indexées possèdent un maximum de 300 éléments. Si le nombre d'éléments est supérieur à 300, les exemples 1 et 2 les affichent tous alors que l'exemple 3 n'affiche que les 300 premiers.
L'exemple 1 présente une indexation implicite (les index de début et de fin par défaut sont utilisés). Le bean possédant le moins de propriétés indexées est celui qui limite le nombre de répétitions de la boucle.
<table> <tsx:repeat> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="city" /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="address" /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="telephone" /> </tr></td> </tsx:repeat> </table>
L'exemple 2 présente une indexation explicite, avec un index de début et un index de fin :
<table> <tsx:repeat index=myIndex start=0 end=2147483647> <tr><td><tsx:getProperty name="serviceLocationsQuery" property=city(myIndex) /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property=address(myIndex) /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property=telephone(myIndex) /> </tr></td> </tsx:repeat> </table>
L'exemple 3 présente une indexation semi-explicite (l'index de fin est spécifié explicitement, mais pas l'index de début). Bien que l'attribut index soit spécifié, la propriété city peut toujours être indexée implicitement, car (myIndex) n'est pas obligatoire.
<table> <tsx:repeat index=myIndex end=299> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="city" /t> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="address(myIndex)" /> </tr></td> <tr><td><tsx:getProperty name="serviceLocationsQuery" property="telephone(myIndex)" /> </tr></td> </tsx:repeat> </table>
Imbrication des blocs <tsx:repeat>
Vous pouvez imbriquer des blocs <tsx:repeat>. Chacun d'eux est indexé séparément. Cette possibilité est utile pour l'entrelacement des propriétés de deux beans ou de propriétés qui possèdent des sous-propriétés. Dans l'exemple, deux blocs <tsx:repeat> sont imbriqués pour afficher la liste des titres figurant sur chaque CD contenu dans le panier d'achat de l'utilisateur.
<tsx:repeat index=cdindex> <h1><tsx:getProperty name="shoppingCart" property=cds.title /></h1> <table> <tsx:repeat> <tr><td><tsx:getProperty name="shoppingCart" property=cds(cdindex).playlist /> </td></tr> </tsx:repeat> </table> </tsx:repeat>