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 :

[Struts]logic:iterate - une ligne sur deux en couleur


Sujet :

Struts 1 Java

  1. #1
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut [Struts]logic:iterate - une ligne sur deux en couleur
    Bonjour,

    je genere un tableau dynamiquement en struts en utilisant la balise logic:iterate et je souhaiterai modifier la couleur de la ligne une fois sur 2 pour plus de lisibilité.

    je cherche un tag ou un attribut me donnant l'info de la val du compteur de boucle.. enfin un moyen de faire ca 'proprement' ...


    merci !
    ~jeb~

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <logic:iterate name="form" property="prop" indexId="cpt">
    <bean write name="cpt"/>
    </logic:iterate>
    L'indexId est ton compteur de boucle avec Struts

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  3. #3
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    yess, ca a fonctionné !

    cependant, j'ai un problème concernant un test :
    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                      <logic:iterate id="currentuser" name="user_list" indexId="cpt">
                      <!-- Set line color -->
                      <% int reste= cpt.intValue() % 2 ;
                          String colorLine="#ivory";
                          String re = new Integer(reste).toString(); 
                          out.print("Reste "+re);
                     %>    
                        <logic:equal parameter='<%=re%>' value="1">                   
                            <% colorLine = "#F4EFEC";  %>
                        </logic:equal>
    je devrai avoir une ligne sur 2 en "ivory" mais le code entre tout le temps dans le logic:equal alors que j'écris la valeur de "re", elle vaut bien une fois sur 2 '0' ou '1'..
    ??
    ~jeb~

  4. #4
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Avec les JSTL, je pense que tu pourrais t'en sortir en codant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <c:if test="${cpt % 2 == 1}">
    <% colorLine = "#F4EFEC";  %>
    </c:if>
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    j'ai essayé, je comprends pas, ca marche pas.

    je rentre *toujours* dans la clause 'if'..
    j'ai meme essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                      <c:if test="${(cpt % 2)==0}">
                        <%colorLine="red";%>
                       </c:if>
                       <c:if test="${(cpt % 2)==0}">
                        <%colorLine="#F4EFEC";%>
                       </c:if>
    et ca prends *toujours* la derniere couleur...
    why ???
    ~jeb~

  6. #6
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Si tu fais ceci, dans le logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                      <c:if test="${(cpt % 2)==0}"> 
                        <%colorLine="#ivory";%> 
                       </c:if> 
                       <c:if test="${(cpt % 2)==1}"> 
                        <%colorLine="#F4EFEC";%> 
                       </c:if>
    ça ne marche pas ?

    Peux-tu me montrer un peu plus de code de ta jsp, là où il y a les balises <tr> et l'appel de la couleur ?
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     
     <table width="100%"  border="0" cellpadding="2" cellspacing="5" bgcolor="#EDE6E0">
           <logic:present name="user_list">
              <logic:iterate id="currentuser" name="user_list" indexId="cpt">
     
        <c:if test="${(cpt % 2)==0}">
          <%colorLine="red";%>
         </c:if>
        <c:if test="${(cpt % 2)==0}">
            <%colorLine="#F4EFEC";%>
         </c:if>
     
           <tr align="left" bgcolor="#F4EFEC">                 
            <td width="80" height="20" valign="middle" bgcolor='<%=colorLine%>'                        class="unnamed1">
    <!-- contenu du tableau -->
     
     
                     </tr>                                                       
                      </logic:iterate>
                    </logic:present>
    ~jeb~

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    C'est sur la balise tr que tu dois faire appel à colorLine, puisque tu veux changer de couleur une ligne sur deux, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           <tr align="left" bgcolor="<%=colorLine%>">
    Modératrice Java - Struts, Servlets/JSP, ...

  9. #9
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    non non, c bien sur chaque td que je souhaite appliquer la couleur....(le tr dessine une bordure..)
    ~jeb~

  10. #10
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Excuse-moi mais y a un truc que j'pige pas.

    Si tu codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <tr align="left" bgcolor="<%=colorLine%>">
    toutes les colonnes de ta ligne prendront la couleur de colorLine, et ça devrait changer de couleur pour chaque ligne, si toutefois le tag c:if fonctionne comme il faut.
    Donc, il ne me semble pas utile de préciser la couleur sur chaque colonne !

    As-tu testé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                      <c:if test="${(cpt % 2)==0}"> 
                        <tr align="left" bgcolor="ivory"> 
                       </c:if> 
                       <c:if test="${(cpt % 2)==1}"> 
                        <tr align="left" bgcolor="#F4EFEC"> 
                       </c:if>
    PS: enlève le # devant ivory.

    J'ai codé ça en html pur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <table border="0" cellpadding="2" cellspacing="5" bgcolor="#EDE6E0">
      <tr align="left" bgcolor="ivory">                  
    	<td width="80" height="20" valign="middle" >row1col1</td>
    	<td width="80" height="20" valign="middle" >row1col2</td>
      </tr>
      <tr align="left" bgcolor="#F4EFEC">                  
    	<td width="80" height="20" valign="middle" >row2col1</td>
    	<td width="80" height="20" valign="middle" >row2col2</td>
      </tr>
    </table>
    Teste-le et dis-moi si c'est bien ce résultat-là que tu veux obtenir ?
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Quitte à utiliser les JSTL, tu peux aussi faire un test en remplaçant le logic:iterate par un c:forEach, et même utiliser le c:when comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <c:forEach items="${userList}" var="currentUser" varStatus="status">
     <c:choose>
       <c:when test="${status.index % 2 == 0}">
         <tr bgcolor="ivory"> 
       </c:when>
       <c:otherwise>
         <tr bgcolor="#F4EFEC">
       </c:otherwise>
     </c:choose> 
    </c:forEach>
    En Struts, il est conseillé de coder userList plutôt que user_list et currentUser au lieu de currentuser, soit une majuscule à chaque nouveau mot sauf le premier.
    Modératrice Java - Struts, Servlets/JSP, ...

  12. #12
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    Ok pour le <tr>.. je peux mettre la bgcolor su tr, c suffisant pour la ligne. ;-)
    (plutot que de changer chaque td)

    Par contre, il se passe qqchose de bizarre.
    Si je mets mes tests dans cet ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                      <c:if test="${!(cpt%2)}">
                            <%colorLine="red";%>
                       </c:if>
     
                       <c:if test="${(cpt%2)}">
                            <%colorLine="#F4EFEC";%>
                       </c:if>
    <% out.print(colorLine)%>
    j'obtiens sur ma page " #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC #F4EFEC"

    et si j'inverse les tests, soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                       <c:if test="${(cpt%2)}">
                            <%colorLine="#F4EFEC";%>
                       </c:if>
                      <c:if test="${!(cpt%2)}">
                            <%colorLine="red";%>
                       </c:if>
    j'obtiens des "red red red red red red red red red " en boucle..

    Le code passe toujours dans le if ET le else !!

    je comprends plus rien !!
    ~jeb~

  13. #13
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    As-tu essayé avec le c:when ?
    Et avec le c:forEach ?
    Modératrice Java - Struts, Servlets/JSP, ...

  14. #14
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    je suis en train d'essayer..

    Mais vraiment, je comprends pas ce qu'il se passe !!
    (c pas tres complisqué enplus !!!)
    ~jeb~

  15. #15
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    mais je peux pas remplacer le iterate par un foreach..

    apres, il ne retrouve aucun bean...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    <c:forEach items="${userList}" var="currentUser" varStatus="status">
     <c:choose>
       <c:when test="${status.index % 2 == 0}">
         <tr bgcolor="ivory">
       </c:when>
       <c:otherwise>
         <tr bgcolor="#F4EFEC">
       </c:otherwise>
     </c:choose>
     
                      	<td width="80" height="20" valign="middle"  class="unnamed1">
                      		<span class="unnamed4">
    	                  	<myTag:pix src="puce02.gif" width="9" height="9"/>
       	               	<a href="users_profile.html" target="_blank">
       	               		[b]<bean:write name="currentUser" property="nickName"/>[/b]
    	   	               </span>
    	   	            </td>
    je me retrouve avec --> "g.apache.jasper.JasperException: Cannot find bean currentUser in any scope"

    ~jeb~

  16. #16
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    As-tu modifié currentuser en currentUser et user_list en userList dans tes bean ?
    Modératrice Java - Struts, Servlets/JSP, ...

  17. #17
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    oui oui !!

    ~jeb~

  18. #18
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par jeb001
    Par contre, il se passe qqchose de bizarre.
    Si je mets mes tests dans cet ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                      <c:if test="${!(cpt%2)}">
                            <%colorLine="red";%>
                       </c:if>
     
                       <c:if test="${(cpt%2)}">
                            <%colorLine="#F4EFEC";%>
                       </c:if>
    <% out.print(colorLine)%>
    ...

    je comprends plus rien !!

    D'après la documentation du tag c:if, l'attribut test attend un booléen. Or cpt%2 n'est pas un booléen mais un entier ! Et en Java, contrairement au C/C++, les entiers ne sont pas des booléens même si ils valent 0 ou 1. La preuve, le code suivant te provoque une erreur de compilation ("cannot convert from int to boolean") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	if ( cpt % 2 ) {
    		// ...
    	}
    Les Expressions Languages (EL) gèrent automatiquement le typage des éléments, et permettent d'éviter un grand nombre d'exception...

    Donc le cpt%2 n'étant pas un booléen valide, je pense que le moteur des EL doit lui passer la valeur false ce qui fait que ${(cpt%2)} n'est jamais exécuté alors que ${ !(cpt%2)} l'est à chaque fois puisque (cpt%2) sera toujours "convertit" en false...

    En conclusion il faut utiliser l'opérateur == :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <c:if test="${(cpt%2)==0}">
    	<%colorLine="red";%>
    </c:if>
    <c:if test="${(cpt%2)==1}">
    	<%colorLine="#F4EFEC";%>
    </c:if>
    a++

  19. #19
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Je pense que c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write name="currentUser" property="nickName"/>
    qui ne lui plaît pas.

    Y a sans doute un problème de compatibilité entre c:forEach et bean:write.

    Essaie de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:out value="${currentUser.nickName}"/>
    à la place pour voir.
    Modératrice Java - Struts, Servlets/JSP, ...

  20. #20
    Membre régulier Avatar de jeb001
    Profil pro
    Inscrit en
    Août 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2005
    Messages : 212
    Points : 76
    Points
    76
    Par défaut
    ok je viens de faire ca..

    je comprends pas ce qu'il se passe.
    j'ai toujours la couleur du 2eme test.

    (adiGuba, bien vu le booléen.. g rectifié .. mais pas mieux..)

    en jstl comme avec un iterate
    ~jeb~

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [A-07] une ligne sur deux en couleur
    Par Nounours1 dans le forum IHM
    Réponses: 8
    Dernier message: 22/10/2008, 14h43
  2. [BO 6.5] une ligne sur deux en couleur
    Par alpachico dans le forum Deski
    Réponses: 16
    Dernier message: 30/05/2007, 16h39
  3. [Rave 5.0-Delphi 7] Griser une ligne sur deux
    Par Frank dans le forum Rave
    Réponses: 5
    Dernier message: 09/08/2006, 09h03
  4. [Formulaire continu] une ligne sur deux en gris
    Par genius99 dans le forum IHM
    Réponses: 7
    Dernier message: 30/10/2005, 18h52
  5. coloriser une ligne sur deux
    Par the0livier dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2005, 10h54

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