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 :

virgule dans un InputText avec BigDecimal


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut virgule dans un InputText avec BigDecimal
    Salut à tous

    J'ai une question concernant les inputText avec un binding sur un champ BigDecimal.

    Actuellement seul le point est pris en compte :
    pour un prix comme 12,40 Eur , l'utilisateur doit saisir : 12.40 dans l'inputText.

    Est t il possible de spécifier un mask autorisant la saisie de 12,40 pour le
    BigDecimal , ou dois je utiliser une String pour l'inputtext à la place
    et créer mon propre validator ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Par défaut Conversion de montant
    Moi je te conseille de laisser en BigDecimal et de créer un converter. C'est simple et plus propre.

  3. #3
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    Ok Merci

    donc je peux laisser des BigDécimals partout sans rien modifier.
    Pour le converter , j'y ai pas trop touché à cette partie :
    je risques pas avoir un Format exception ou autre ou c'est mon converter
    qui va être appelé avant celui par défaut ?

    Le converter va s'appliquer sur le Texte alors avant que JSF le transforme
    en BigDecimal ?
    Si t'as quelques petites infos supplémentaires ou qqs lignes guide de code
    ça pourrait m'aider ?

    Au moins je sais déjà la ligne directrice à suivre.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Par défaut Explication sur les converter
    Les converters fonctionne grace à deux fonctions :
    - getAsString : cette fonction va transformer ton BigDecimal en chaine pour pouvoir l'afficher dans les JSP. Cette fonction est appelée lors de la phase Apply Request Value.
    - getAsObject : cette fonction transforme les chaines affichées dans ta JSP en Object, dans ton cas en BigDecimal. Cette fonction est appelée lors de la phase Renser Response.

    Voilà un exemple de converter qui est proche de ce que tu veux faire (converter pour les doubles) :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    public class MontantConverter implements Converter {
     
    	/**
             * Conversion de l'object en une chaine pouvant être affiché lors de la phase Render Response
             */
    	public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object obj) {
    		if(obj == null) {
    			return "";
    		}
    		Double montant = (Double)obj;
    		DecimalFormat format = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Locale.FRANCE));
    		String value = format.format(montant);
     
    		return value;
    	}
     
    	/**
             * Conversion dans le modèle approprié pour l'enregistrement de la valeur lors de la phase
             *  Apply Request Value
             */
    	public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String str) {
    		if(str == null || str.equals("")) {
    			return null;
    		}
    		if(!str.matches("[0-9]+(,[0-9]+)?")) {
    			FacesMessage mess = new FacesMessage();
    			mess.setSeverity(FacesMessage.SEVERITY_ERROR);
    			mess.setSummary(PropertiesMessages.getErrorMessage("gen.formatInvalide"));
    			String det = PropertiesMessages.getErrorMessage("det.formatInvalide");
    			det.replaceFirst("{0}", "le montant");
    			mess.setDetail(det);
    			throw new ConverterException(mess);
    		}
    		str = str.replace(" ", "");
    		str = str.replace("\u00a0", "");
    		str = str.replace(",", ".");
     
    		return new Double(str);
    	}
    }
    Voilà.
    Après, tu appelles ton converter pour l'affichage du champ.

    Bonne chance

  5. #5
    Membre très actif
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Par défaut
    Merci beaucoup mymyma

    Surtout pour l'exemple car j'avais vraiment besoin de quelques lignes guides.

Discussions similaires

  1. [AC-2007] Ignorer la virgule dans resultat requête avec LIKE
    Par alfhcg dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 27/11/2010, 15h16
  2. Réponses: 3
    Dernier message: 03/05/2008, 16h44
  3. probleme virgule dans une ListBox avec stringht
    Par yomane 51 dans le forum Delphi
    Réponses: 1
    Dernier message: 10/01/2007, 17h47
  4. insertion d'un nombre a virgule dans un champ avec un requete sql
    Par sundjata dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/05/2006, 16h29
  5. chaine de caractere avec virgule dans Insert
    Par Sylvain245 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2005, 12h56

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