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 2 Java Discussion :

Test d'une String dans un Iterator ( <s:iterator, <s:if )


Sujet :

Struts 2 Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Test d'une String dans un Iterator ( <s:iterator, <s:if )
    Bonjour !

    J'ai un ptit problème de test sur une chaine de caractère. J'arrive a récupérer la chaine comme il faut, mais lorsque j'essaye de tester l'égalité des chaines, je rentre toujours dans le 'else' ...

    Alors voila, j'ai un iterator qui contient des objets 'Operation' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Operation {
        private String date = null;
        private int idUser;
        private String montant = null;
        private String plusOuMoins = null;
     
        public Operation(){
     
        }
     
        [...]
    Dans ma jsp, je veux afficher la liste des 'Operation' de l'iterator, mais en faisant un test sur une des variables de l'objet Operation pour afficher du html différent suivant le résultat du test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <s:iterator value="listOperation">   
        <s:if test="#plusOuMoins.equals('+')">   /* <-------C'est ici que ca foire! :) */ 
            <div class="operation plus">
                  [...]
            </div>
        </s:if>
        <s:else>
            <div class="operation moins">
                  [...]
            </div>
        </s:else>
    </s:iterator>
    <s:property value="plusOuMoins"/> renvoi bien la bonne valeur (+ ou -), mais je n'arrive pas a faire de tests sur cette String...

    Comment faire le test sur l'attribut d'un objet ?
    Merci d'avance!

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    post maj... et up en même temps!

  3. #3
    Membre habitué Avatar de arnaud.tlse
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 126
    Points
    126
    Par défaut
    Salut,

    tu peux essayer ceci, je ne suis pas pro de Struts2, mais c'est comme ça que j'opère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <s:iterator id="operation" value="listOperation">   
        <s:if test="#operation.plusOuMoins == '+'">
                [...]
        </s:if>
        <s:else>
                [...]
        </s:else>
    </s:iterator>
    Sans oublier getters()/setters() sur l'attribut plusOuMoins.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Le problème ici est que lorsque tu as un seul caractère à comparer, il n'est plus considéré comme un String, mais bien comme un char. Donc "+" est différent de '+'. Pour que ta comparaison soit effectuée correctement, utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:if test='"+".equals(#plusOuMoins)'>

  5. #5
    Nouveau membre du Club

    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par ChristianMartel Voir le message
    Le problème ici est que lorsque tu as un seul caractère à comparer, il n'est plus considéré comme un String, mais bien comme un char. Donc "+" est différent de '+'. Pour que ta comparaison soit effectuée correctement, utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:if test='"+".equals(#plusOuMoins)'>
    Merci pour cette réponse !! *%!#~ de syntaxe ognl...

  6. #6
    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
    Bonjour,

    Je relance ce post, car je rencontre le même problème.. impossible de faire une comparaison de chaines de caractère dans un tag s:if..

    J'ai bien noté la subtilité pour différencier un String d'un char.. voici mon code :


    Pour debug : ${resp}
    <s:if test='"OK".equals(#resp)'>
    it works
    </s:if>
    <s:else>
    it doesn't
    </s:else>

    Il s'affiche à l'écran systématiquement :
    Pour debug : OK it doesn't.

    pourquoi ?

    Merci

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par jeb001 Voir le message
    Bonjour,

    Je relance ce post, car je rencontre le même problème.. impossible de faire une comparaison de chaines de caractère dans un tag s:if..

    J'ai bien noté la subtilité pour différencier un String d'un char.. voici mon code :


    Pour debug : ${resp}
    <s:if test='"OK".equals(#resp)'>
    it works
    </s:if>
    <s:else>
    it doesn't
    </s:else>

    Il s'affiche à l'écran systématiquement :
    Pour debug : OK it doesn't.

    pourquoi ?

    Merci

    Ça dépend d'où provient ton resp. Si c'est directement un objet java, tu ne dois pas mettre de # devant. Dans le cas de l'exemple plus haut, le #plusOuMoins est un élément d'une liste sorti à l'aide de l'iterator.

  8. #8
    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
    Mon resp est un attribut de la classe Action, avec un getter et un setter..

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Donc, est-ce que ça fonctionne si tu enlèves le #?

  10. #10
    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, j'ai trouvé..
    En fait, s'il s'agit d'un attribut provenant de la classe java, je dois faire une comparaison de chaine, mais en utilisant '==' et non pas '.equals' ...
    Là, ça fonctionne.. mais quelque chose est dérangeant, non ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par jeb001 Voir le message
    Ok, j'ai trouvé..
    En fait, s'il s'agit d'un attribut provenant de la classe java, je dois faire une comparaison de chaine, mais en utilisant '==' et non pas '.equals' ...
    Là, ça fonctionne.. mais quelque chose est dérangeant, non ?
    Effectivement, c'est dérangeant! Normalement, le equals devrait fonctionné en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pour debug : ${resp}
    <s:if test='"OK".equals(resp)'>
    it works
    </s:if>
    <s:else>
    it doesn't
    </s:else>
    Est-ce que tu as essayé de cette façon?

  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
    Oui, j'ai essayé ça plus haut.
    (soit, en enlevant juste le # devant resp.. mais rien de mieux)

    Pour que ça fonctionne, il faut utiliser l'opérateur == entre 2 chaines de caractere.
    Le tout, c'est de le savoir ;-)
    Merci !

Discussions similaires

  1. Conseil sur l'extraction d'une string dans une string
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 02/06/2006, 15h54
  2. Réponses: 2
    Dernier message: 15/03/2006, 11h13
  3. Comment enregistrer une string dans un fichier
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/09/2005, 15h52
  4. Réponses: 12
    Dernier message: 27/06/2005, 20h06
  5. Réponses: 6
    Dernier message: 24/07/2003, 13h39

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