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

JSF Java Discussion :

h:selectOneMenu et converter


Sujet :

JSF Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut h:selectOneMenu et converter
    Bonjour,

    j'ai un soucis lors de l'affichage d'une page. L'idée est d'associer une monnaie à un pays (la monnaie et le pays sont reliés par une relation @OneToOne).

    Pour chaque pays, la monnaie est modifiable via une liste déroulante dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:selectOneMenu value="#{country.defaultCurrency}" converter="currencyConverter">  
      <f:selectItems value="#{Country.currencies}" var="currency" itemValue="#{currency}"/> 
    </h:selectOneMenu>
    Or à l'affichage, la liste déroulante est composée des éléments de la liste des monnaies sous forme de String (appel à la méthode toString()).

    Un idée ?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux mieux expliquer le problème??

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    J'ai fait des tests et voici mon problème, avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:selectOneMenu value="#{country.defaultCurrency}" converter="currencyConverter">  
      <f:selectItems value="#{Country.currencies}" var="currency" itemValue="#{currency}"/> 
    </h:selectOneMenu>
    Le code généré est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select name="countriesDatatable:0:j_idt37" size="1">	<option value="Euro">Euro</option>
    </select>
    Ce qui est cohérent.
    Cependant lors de la validation du formulaire, le mapping inverse (String -> Objet) ne semble pas fonctionner, j'obtiens le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CountriesDatatable:0:j_idt37: Erreur de validation: Valeur not valid.
    Or il n'y a pas de validateur de déclaré, je ne vois pas où est le problème.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux donner le code du converter ainsi que les getter/setter de ton objet .

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    Voici le converter :

    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
     
    @FacesConverter(value="currencyConverter")
    public class CurrencyConverter implements Converter {
     
    	private static final Logger log = LoggerFactory.getLogger(CurrencyConverter.class);
     
    	@Override
    	public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
    		log.debug("getAsObject value : {}",value);
    		Currency c = new Currency();
    		c.setLongTerm(value);
    		return c;
    	}
     
    	@Override
    	public String getAsString(FacesContext ctx, UIComponent component, Object value) {
    		log.debug("getAsString value : {}",value);
    		Currency c = (Currency) value;
    		log.debug("getAsString returns : {}",c.getLongTerm());
    		return c.getLongTerm();
    	}
     
    }
    Les getter/setter pour associer une monnaie à un pays :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public final Currency getDefaultCurrency() {
        return defaultCurrency;
      }
     
      public void setDefaultCurrency(Currency value) {
        defaultCurrency = value;
      }

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Par défaut
    La réponse était ici : http://blogs.sun.com/jtb/entry/valid...r_value_is_not

    Il fallait définir la méthode equals pour l'entité Currency.

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

Discussions similaires

  1. selectOneMenu : converter appelé d'abord
    Par ktaria dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 23/03/2013, 13h16
  2. SelectOneMenu Converter: Valeur is not valid
    Par Lourpiop dans le forum JSF
    Réponses: 4
    Dernier message: 27/05/2010, 17h39
  3. Converter et selectOneMenu
    Par JeReMsS69 dans le forum JSF
    Réponses: 3
    Dernier message: 13/05/2009, 12h53
  4. problemes selectonemenu et converter
    Par Tauros_king dans le forum JSF
    Réponses: 1
    Dernier message: 08/03/2007, 20h23
  5. JSF selectOneMenu converter Integer et String
    Par LaseLiep dans le forum JSF
    Réponses: 2
    Dernier message: 12/01/2007, 10h20

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