IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[logic:iterate] test de la 1ère ou dernière iteration ?


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 69
    Par défaut [logic:iterate] test de la 1ère ou dernière iteration ?
    Bonjour,

    Mon besoin est simple : je fais un <logic:iterate> sur une collection, mais j'aimerais pouvoir tester si c'est la 1ère itération ou la dernière itération pour faire une action différente.

    Il est extrêmement courant de vouloir faire une action à la 1ère itération ou à la dernière itération.

    Ici, j'itère sur une collection de String pour afficher son contenu en séparant les éléments par une virgule et un espace. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur1, valeur2, valeur3
    A la dernière itération, il ne faut pas afficher la virgule et l'espace.

    Comment est-ce que vous feriez ?

    piloupy

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Une solution avec la JSTL :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <c:forEach items="${maCollection}" var="item" varStatus="status">
    	<c:choose> 
    		<c:when test="${status.index == 0}"> 
    			<c:set var="sep" value=""/> 
    		</c:when> 
    		<c:otherwise> 
    			<c:set var="sep" value=", "/> 
    		</c:otherwise> 
    	</c:choose>
    	<c:out value="${sep}"/><c:out value="${item}"/>
    </c:forEach>
    Une solution avec le tag logic:iterate :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <logic:iterate name="maCollection" id="item" indexId="index">
    	<logic:equal name="index" value="0">
    		<bean:define id="sep" value=""/> 
    	</logic:equal>
    	<logic:notEqual name="index" value="0">
    		<bean:define id="sep" value=", "/> 
    	</logic:notEqual>	
    	<bean:write name="sep"/><bean:write name="item"/>
    </logic:iterate>

  3. #3
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut Correction <c:forEach>
    Dans l'exemple que je t'ai donné tout à l'heure avec le tag c:forEach, on obtient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur1 , valeur2 , valeur3
    Or, toi tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur1, valeur2, valeur3
    Il faut donc tester la dernière itération via le status.last et coder ceci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <c:forEach items="${maCollection}" var="item" varStatus="status">
    	<c:choose> 
    		<c:when test="${status.last}"> 
    			<c:set var="sep" value=""/> 
    		</c:when> 
    		<c:otherwise> 
    			<c:set var="sep" value=", "/> 
    		</c:otherwise> 
    	</c:choose>
    	<c:out value="${item}"/><c:out value="${sep}"/>
    </c:forEach>

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 69
    Par défaut
    J'ai essayé tes solutions, euh... c_nvy (drôle de nom )

    J'ai effectivement constaté que j'avais eu le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur1 , valeur2 , valeur3
    avec la solution Struts.

    Ta judicieuse remarque sur l'espace en trop, marque ta rigueur, et j'avoue que je suis aussi un maniaque .

    J'ai testé ta dernière version avec la JSTL, et elle produit exactement le résultat escompté. Je te remercie infiniement. J'avais des réticences à utiliser la JSTL, mais le <c:choose><c:when><c:otherwise> est vraiment ce qui manque pour Struts (disons, la clause "else" d'un "if").

    C'est marrant de faire couler autant d'encre pour un problème de virgule

    Merci encore,

    piloupy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test d'une String dans un Iterator ( <s:iterator, <s:if )
    Par chezwam56 dans le forum Struts 2
    Réponses: 11
    Dernier message: 23/08/2011, 16h31
  2. Supprimer 1ère et dernière ligne d'un fichier
    Par yabbiyou dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/03/2007, 09h05
  3. [VBA-E] Connaître la 1ère & la dernière ligne sur un filtre AUTO
    Par CléoB dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2007, 18h09
  4. [struts][iterate] problème logic:iterate avec un Vector
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 9
    Dernier message: 31/03/2004, 18h05
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo