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.
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:
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