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 :

Problème comparaison String de type "#D" avec logic:equal


Sujet :

Struts 1 Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Problème comparaison String de type "#D" avec logic:equal
    Bonjour,

    Je rencontre un problème avec l'utilisation du tag <logic:equal> :

    Je remplis une liste déroulante avec des données récupérées en base. (Des codes de type "1D", "1A", "2F"... Bref un chiffre suivi d'une lettre.)

    Pendant l'alimentation de ma liste, je compare chaque code de la liste avec un code préalablement choisi par l'utilisateur. Si les deux codes sont égaux, j'ajoute "selected" à la balise <option> du code en cours. De cette manière la ligne du code sélectionné par l'utilisateur est sélectionnée dans la liste.

    Le logic:equal fonctionne comme attendu pour tous les cas, sauf pour ceux ou le code sélectionné par l'utilisateur est 1D ou 1F. Dans ces cas précis, le logic:equal estimera que 1D = 1D ET 1D = 1F...
    Au débugage, dans le cas ou l'utilisateur aura choisi 1D, la ligne 1D sera sélectionnée, puis la ligne 1F aussi finalement...

    Mon code (un peu modifié parce que code d'entreprise):

    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
     
    <logic:iterate id="it" name="maListe" type="com.type.toto.Popo">
     
    <logic:equal name="unBean" property="codeUser" value="<%=it.getCode()>">
     
      <option value="<bean:write name="it" property="code"/>" selected>
         <bean:write name="it" property="code" />
       </option>
     
    </logic:equal>
     
    <logic:notEqual name="unBean" property="codeUser" value="<%=it.getCode()>">
     
      <option value="<bean:write name="it" property="code"/>">
        <bean:write name="it" property="code" />
      </option>
     
    </logic:notEqual>
     
    </logic:iterate>
    Il y aurait des moyens de contourner ce problème, mais je suis preneur de tous avis et propositions !

    D'avance merci !

    Xav

    PS : J'ajoute que le code strictement équivalent mais dans un scriptlet fonctionne correctement.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tu remplace
    par
    çà donne quoi?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Salut,

    En remplacant <%=it.getCode()> par ${it.code} cela ne marche pas mieux, aucune ligne n'est sélectionnée.

    Mais pour tout dire je ne connais pas cette syntaxe. Je ne l'ai pas rencontrée dans le code sur lequel je travaille. Peut-être le framework ne la supporte t-il pas ?

    J'ai placé ${it.code} entre "" , est-ce correct ? (autrement ça plante de toutes façons).

    --------------------------------------------------------------------

    J'ai remplacé les logic:equal et logic:notEqual par les vérifications en scriptlet, ça résout le problème. Cela dit si quelqu'un a une explication ça satisferait ma curiosité !

    Merci !

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Salut,

    La résolution approche : Ce qui se passe c'est que logic:equal opère une conversion avant de comparer.
    A ce moment là, il se dit que D = DOUBLE et F = FLOAT.

    1D = Double 1 = Float 1 = 1F ...

    Une belle p'tite anomalie

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