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

Taglibs Java Discussion :

Problème de c:choose


Sujet :

Taglibs Java

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut Problème de c:choose
    Bonjour,

    J'ai ceci dans un <t:columns> d'un dataTable dynamique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <f:facet name="header">
    <h:outputText value="#{col2.nom_variable}"/>
    </f:facet>
    <c:choose>
    <c:when test='#{"col2.type_erreur" == "1"}'><h:outputText value="#{col2.valeur}"/></c:when>
    <c:when test='#{"col2.type_erreur" == "2"}'><h:outputText value="#{col2.valeur}" styleClass="import_type_error_insertion"/></c:when>
    <c:when test='#{"col2.type_erreur" == "3"}'><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurimpossible"/></c:when>
    <c:when test='#{"col2.type_erreur" == "4"}'><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurborne"/></c:when>
    <c:when test='#{"col2.type_erreur" == "5"}'><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurmultiple"/></c:when>
    <c:otherwise><h:outputText value="#{col2.valeur}"/><h:outputText value="otherwise"/></c:otherwise>
    </c:choose>			
    <f:verbatim><br/></f:verbatim>
    <h:outputText value="#{col2.type_erreur}"/>

    Problème : Impossible de faire fonctionner les test.
    J'ai essayé toute sorte de possibilité avec les " ", les ' ', le $ à la place du #, etc ... mais rien ne marche.

    col2.type_erreur est un int qui est correctement récupérer. Je l'affiche dans tous les cas.

    De plus, si à la place d'un col2.type_erreur" == "X", je met "True". le test est effectué --> j'en déduis que l'erreur vient de mon égalité. Mais impossible de définir quoi exactement.

    vous avez des idées ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu ne mélangerais pas un peu JSF et JSTL ?

    En JSTL, j'aurais plutôt écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <c:when test="${col2.type_erreur == '1'}">

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Oui, sans doute.
    A force de chercher une solution. J'ai tout mélangé.


    Je viens d'essayer ton conseil mais cela ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:when test="${col2.type_erreur == '3'}">
    Toujours la partie <otherwise> qui est lancèe.

    Je ne sais plus trop vers ou chercher.
    ++

  4. #4
    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
    Si col2.type_erreur est un int, essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:when test="${col2.type_erreur == 3}">

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Je viens de tester ... aucun changement.

    J'ai tellement joué avec les " " ou ' ' que je ne pense pas que l'erreur provienne des guillemets.

    Ya vraiment quelque chose qui m'échappe.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Et qu'est-ce que ca donne si tu ajoutes un test du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% System.out.println(col2.getType_erreur()); %>
    => Question : as-tu bien des accesseurs sur l'attribut type_erreur (qui serait, soit dit en pasant, très content d'être renommé en "typeErreur") ?

  7. #7
    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
    si col2.type_erreur était de type String, il faudrait coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:when test="${col2.type_erreur eq '3'}">
    mais comme tu dis qu'il est de type int, il est logique d'enlever les quotes et d'utiliser le ==.

    Tu es bien certain qu'il est de type int ?

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    A tout hasard, en changeant le type de ta variable de int en Integer ?

  9. #9
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Salut à tous,


    Question : as-tu bien des accesseurs sur l'attribut type_erreur (qui serait, soit dit en pasant, très content d'être renommé en "typeErreur") ?
    Comme tu peux le voir sur le code, j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{col2.type_erreur}"/>
    qui m'affiche mes "type_erreur".
    Cela doit revenir au même que de faire le Sysout. Peux-tu me confirmer ?
    Je prends note de ton conseil de renommer "type_erreur" en "typeErreur".


    Tu es bien certain qu'il est de type int ?
    Type_erreur se trouve dans un bean et est appelé comme un "int".
    A partir de là, oui je te confirme que c'est bel et bien un int.
    Du moins, je vois pas ce qui pourrait le faire changer.
    Au cas ou, je fais quand même le test avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:when test="${col2.type_erreur eq '3'}">
    Cela ne change rien.

    A tout hasard, en changeant le type de ta variable de int en Integer ?
    Essai non concluant...


    Merci tout de même de vous pencher sur mon cas.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Citation Envoyé par balsa
    Comme tu peux le voir sur le code, j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{col2.type_erreur}"/>
    qui m'affiche mes "type_erreur".
    Cela doit revenir au même que de faire le Sysout. Peux-tu me confirmer ?
    En principe oui, ca revient à peu près au même (sauf qu'on écrit dans la console), sauf que là, ca ne marche pas, le but est donc de faire autrement pour voir si ca change quelque chose, et donc pour trouver le problème.

    Tu ne réponds pas à ma question : as-tu bien des accesseurs (getter / setter) pour ton attribut type_erreur (et sont-ils bien nommés) ?

    De plus, tu ne précises pas si tu as des exceptions (si oui, lesquelles ?), ou si simplement tu ne récupères pas tes valeurs, sans erreur.

  11. #11
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Salut,

    oui, j'ai des getter et setter. Je vais de ce pas renommer mon type_erreur en typeErreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public int getTypeErreur() {
    		return typeErreur;
    	}
    	public void setTypeErreur(int typeErreur) {
    		this.typeErreur = typeErreur;
    	}
    Je pensais avoir été assez clair sur le dernier point.
    Je n'ai aucune erreur ou exception.

    Mes valeurs sont bien récupérées.
    Je les affiche en utilisant ce code en dehors du <c:choose>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{col2.typeErreur}"/>
    Le soucis est que les "test" ne sont pas effectués ou ne donnent pas le résultat voulu.
    Et donc, c'est toujours la partie <c:otherwise> qui est appelée.

    Voici l'état de mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <c:choose>
                <c:when test="${col2.typeErreur == 1}"><h:outputText value="#{col2.valeur}"/></c:when>
                <c:when test="${col2.typeErreur == 2}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_insertion"/></c:when>
                <c:when test="${col2.typeErreur == 3}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurimpossible"/></c:when>
                <c:when test="${col2.typeErreur == 4}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurborne"/></c:when>
                <c:when test="${col2.typeErreur == 5}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurmultiple"/></c:when>
                <c:otherwise><h:outputText value="#{col2.valeur}"/><h:outputText value="otherwise"/></c:otherwise>
    </c:choose>			
              <f:verbatim><br/></f:verbatim>
    <h:outputText value="#{col2.typeErreur}"/>

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Tiens, une idée, en passant : se pourrait-il que l'équivalent de :
    en JSTL ne soit pas :
    mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${tonManagedBean.col2.typeErreur}
    (car j'imagine que JSF rend optionnel la précision du managedBean)

    Je dis peut-être de grosses bêtises, je ne suis vraiment pas affûté en JSF

  13. #13
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Je viens d'effectuer quelques tests en suivant ton conseil.
    J'ai une nouvelle erreur en utilisant le code de cette manière.
    "java.lang.NumberFormatException: For input string: "typeErreur" "
    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
    23
    <t:dataTable id="dataTableResultatNomVariable" binding="#{importctrl.vue.dataTableResultatNomVariable}"var="col"
    value="#{importctrl.modele.import_biologique.ligne_Bean_Biologique}"
          preserveDataModel="false"
          border ="1"
          rules="all"
          styleClass="import_legendTable">
    <t:columns value="#{importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable}" var="col2">
    <f:facet name="header">
        <h:outputText value="#{col2.nom_variable}"/>
    </f:facet>
    <c:choose>
             <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur == 1}">
    <h:outputText value="#{col2.valeur}"/></c:when>
             <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur == 2}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_insertion"/></c:when>
             <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur == 3}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurimpossible"/></c:when>
              <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur == 4}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurborne"/></c:when>
              <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur == 5}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurmultiple"/></c:when>
              <c:otherwise><h:outputText value="#{col2.valeur}"/><h:outputText value="otherwise"/></c:otherwise>
    </c:choose>			
    <f:verbatim><br/></f:verbatim>
    <h:outputText value="#{col2.typeErreur}"/>
    </t:columns>
    </t:dataTable>
    J'ai remplacé "col2" par le chemin complet de mon bean.

    D'après ce qu'il me dit, mon typeErreur est un donc un string...
    C'est pourtant bien un int dans mon bean.

    Quelqu'un a une explication ?

  14. #14
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Salut,

    Je viens d'essayer en changeant mon typeErreur en un string.
    Voici le nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <c:choose>
    <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur eq 'mise'}"><h:outputText value="#{col2.valeur}"/></c:when>
    <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur eq 'insert'}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_insertion"/></c:when>
    <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur eq 'valeurimpossible'}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurimpossible"/></c:when>
    <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur eq 'valeurborne'}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurborne"/></c:when>
    <c:when test="${importctrl.modele.import_biologique.ligne_Bean_Biologique.pson_variable.typeErreur eq 'valeurmultiple'}"><h:outputText value="#{col2.valeur}" styleClass="import_type_error_valeurmultiple"/></c:when>
    <c:otherwise><h:outputText value="#{col2.valeur}"/><h:outputText value="otherwise"/></c:otherwise>
    </c:choose>
    Toujours la même erreur : java.lang.NumberFormatException: For input string: "typeErreur"

  15. #15
    Membre averti
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Re,

    Je viens de tester d'effectuer un c:choose tout simple
    voici son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <c:when test="${importctrl.modele.type ==1}"><h:outputText value="#{msg['import_type_donnees_contexte']}"/></c:when>
    	<c:when test="${importctrl.modele.type ==2}"><h:outputText value="#{msg['import_type_donnees_releve']}"/></c:when>
    	<c:when test="${importctrl.modele.type ==3}"><h:outputText value="#{msg['import_typedonnes_biologiques']}"/></c:when>
    Les tests sont bien effectués et je récupère la bonne valeur.
    Mais j'ai remarqué un problème d'affichage d'élément (valeur Double, affichage de <br/>). Vraiment très bizarre.

    Ensuite, j'ai voulu rajouter, la partie <c:otherwise>, que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <c:when test="${importctrl.modele.type ==1}"><h:outputText value="#{msg['import_type_donnees_contexte']}"/></c:when>
    		<c:when test="${importctrl.modele.type ==2}"><h:outputText value="#{msg['import_type_donnees_releve']}"/></c:when>
    		<c:when test="${importctrl.modele.type ==3}"><h:outputText value="#{msg['import_typedonnes_biologiques']}"/></c:when>
    		<c:otherwise><h:outputText value="test"/></c:otherwise> </c:choose>
    Mes problèmes d'affichages sont résolus... mais les "test" ne sont pas effectuées. La seule valeur prise en compte en celle du otherwise...


    Comme rien ne marche avec la balise <c:choose>, je décide de m'orienter vers l'utilisation des <c:if>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <c:if test="${importctrl.modele.type == 1}"><h:outputText value="#{msg['import_type_donnees_contexte']}"/></c:if>
    			 <c:if test="${importctrl.modele.type == 2}"><h:outputText value="#{msg['import_type_donnees_releve']}"/></c:if>
    			 <c:if test="${importctrl.modele.type == 3}"><h:outputText value="#{msg['import_type_donnees_biologiques']}"/></c:if>
    Je récupère bien les bonnes valeurs, mais les problèmes d'affichage sont revenus.

    Tout ca me mène à la conclusion, que la librairie est sans doute mal installée ou mal configurée.

Discussions similaires

  1. [XSLT] Problème de choose
    Par Nicolas BOURDON dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 04/06/2009, 14h07
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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