2017-02-04 4 views
0

Dans un edit.gsp, où j'ai des champs d'entrée pour le nombre décimal, le nombre décimal apparaît comme '3.123' et si je enregistrer: j'ai eu une erreur car le point décimal est faux! Il attend un ','. Mon lieu est la Suède. Je dois donc remplacer manuellement les points par une virgule pour tous les nombres décimaux.Grails - Inputfields affiche un point ('.') Au lieu de (',') pour les nombres décimaux

J'ai regardé toute la semaine et je n'ai trouvé aucune solution. Les Grails ne devraient-ils pas être cohérents et montrer des virgules lorsqu'ils s'attendent à des virgules dans la sauvegarde? Il devrait fonctionner avec BigDecimal et pour le double.

J'ai Grails 3.2.4

Voici un exemple d'un "g: champ" à partir d'une édition forme:

Bredd: <g:field type="number decimal" name="width" min="20" max="300" required="Y" value="${request1?.width}" style="width: 4em"/> 

Alors, que puis-je faire?

Répondre

0

manually replacing dots semble tout horrible et peut-être la mauvaise approche.

segments de réponse déplaçais

donc une mise à jour sur la réponse depuis que je frappé un problème similaire aujourd'hui peut-être dans le sens inverse. Envoyé à travers un nombre de 3333 lorsque la validation a échoué pour une autre raison le nombre dans le champ était devenu 3,333 après l'échec de validation. Si l'ancien problème de validation est résolu, il échouera à cause de la virgule dans le numéro. La raison est avéré être:

<g:textField value="${fieldValue(bean: instance, field: 'someField')}"

lors du retour a changé nombre de 3333 lors d'un changement à ce

value="${instance.someField}" 

ci-dessus était question réelle @larand faisait face à

Je voudrais stocker le champ de saisie width en tant que court

donc:

Class MyClass { 

//if you are storing a number like 123 (non decimal) 
Short width 
//if you are storing 12.12 which becomes 1212 when stored 
Integer width 

BigDecimal getDecimalWidth() { 
    return new BigDecimal(this.width).movePointRight(2).setScale(2) 
} 
void setWidth(BigDecimal decimal) { 
    this.width=new BigDecimal(decimal).movePointLeft(2).setScale(2) 
} 
//unsure but think this should work 
    Integer getWidthInteger() { 
    return this.width as int 
} 
void setWidth(Integer integer) { 
    this.width=(byte)integer 
} 
} 

Cela vous donnera des méthodes pour obtenir la valeur à court comme grande décimale en utilisant ${instance.decimalWidth} ou entier: ${instance.widthInteger}

lorsque votre champ est actually numeric:

<g:formatNumber number="${myCurrencyAmount}" type="currency" currencyCode="EUR" />

Pour moi, cela semble beaucoup plus simple et plus clair que de réduire les chiffres que vous pensez à ce sujet

Après le premier problème de validation, le numéro était 3333 comme indiqué. Alors, c'est peut-être votre problème? Incertain puisque vous parlez de points

+0

Je ne pense pas que vous m'avez eu du mal. J'ai beaucoup de champs dans la classe qui sont numériques, à la fois double et BigDecimal, mais ils impriment tous avec un point. Et quand je sauve la forme, les grails n'acceptent pas les points, les grails veulent des virgules. Alors pourquoi les grails impriment-ils les doubles et les bigdécimaux avec des points quand ils n'acceptent pas les points? Bien sûr, quelque chose ne va pas à l'intérieur, un bug, une mauvaise configuration ou quoi que ce soit.Votre solution me donnera toujours des points, mais je suis toujours intéressé par ce que vous pensez que cette solution ferait pour moi. – larand

+0

vous devez convertir le nombre Double avec des points en nombre entier et stocker puis convertir avec des points, c'est-à-dire avec bigDecimal pour afficher l'édition - vous avez donc un processus bidirectionnel. http://stackoverflow.com/questions/4043579/converting-bigdecimal-to-integer. – Vahid

+0

vous pouvez évidemment compter sur l'objet de domaine pour convertir par magie un type donné en type correct. Si tout cela fonctionne trop complexe comme ci-dessus, vous pouvez créer votre propre processus manuel pendant le processus de sauvegarde qui convertit l'entrée de l'utilisateur de double en entier ou court, puis stocker la valeur. puis lors de l'affichage reconvertir – Vahid