2009-09-07 9 views
2

Mes message.properties contient cette fonction par défaut:Typemismatch avec I18N étiquette au lieu de l'attribut Nom

typeMismatch.java.lang.Double = propriété {0} doit être un nombre valide

Placeholder {0} remplacé par le nom d'attribut. Je veux utiliser l'étiquette qui est utilisée pour le frontend comme ceci:

typeMismatch.java.lang.Double = La propriété {merveilleuse étiquette ici} doit être un nombre valide.

Ma première tentative:

typeMismatch.java.lang.Double = propriété $ {message (code: '0')} doit être un nombre valide.

ne fonctionne pas car il n'y a pas de message '0'. La documentation n'est pas claire à ce moment-là. Quelqu'un a eu une idée pour celui-ci?

Edit:

Eh bien, je peux écrire un message d'erreur pour tous les attributs comme ceci:

typeMismatch.Book.booknumber = Booknumber propriété doit être un nombre valide.

Mais cela semble être beaucoup de travail supplémentaire ...

Répondre

2

Je fait une petite erreur .. il est Damm facile maintenant ... Je vais y répondre ici. Peut-être que quelqu'un se déroulera dans ce:

Mon erreur a été:

typeMismatch.java.lang.Double=Property {0} must be a valid number 

{0} a été remplacé par le nom Attributs.

La raison derrière cela était que l'API de rendu de l'API Grails recherche des noms de classes et des propriétés corrects.

Par exemple:

ma classe est nommé Livre et la propriété est le numéro.

Dans mes propriétés du message:

book.number = Booknumber 

Pour tout i18n a bien fonctionné, mais quand le message d'erreur doit se produire, il montre les éléments suivants:

"Property number must be a valid number." 

version correcte dans les propriétés du message:

Book.number = Booknumber 

Travaux pour moi maintenant. :-)

+0

Pour moi, je devais le faire (fin-à-dire avec ".label"): com.my.pkg.MyDomainClass.title.label = Titre personnalisé com.my.pkg.MyDomainClass.label = My Custom Domain Titre de la classe – mlathe

1

Génial! Merci beaucoup pour votre message! Lorsque cela n'a pas fonctionné pour moi au début, il m'a fallu du temps pour réaliser que j'avais besoin d'utiliser le nom de la classe complète devant le nom de la propriété.Donc la syntaxe est:

package.ClassName.propertyName=Label 

Très utile! Merci encore! Al

+0

Merci de votre réponse. – bastianneu

0

Erreur de liaison de données de Spring validateurs ("{0}" doit être un nombre valide) veulent fullClassName.fieldName Court nom de classe et/ou .label ne sont pas reconnus, voir org.springframework.validation.DefaultBindingErrorProcessor#getArgumentsForBindError

Grails validateurs ("{0 } doit être une adresse e-mail valide ") veulent FQClassName.fieldName.label ou classPropertyName.fieldName.label Ajout .label est un must, comme en témoigne org.codehaus.groovy.grails.validation.AbstractConstraint#rejectValueWithDefaultMessage

par conséquent, vous avez besoin à la fois FQN/shortClassName.attributeName.labeletFQN.attributeName pour obtenir le même nom convivial pour les deux validations.

http://jira.grails.org/browse/GRAILS-8369

0

Un autre indice, dans le cas où il aide la personne suivante, si vous obtenez un message d'erreur comme inamicale « la propriété producer.employeeCount doit être un nombre valide » essayez d'ajouter une propriété appelée simplement producer.employeeCount à votre fichier messages.properties, en tant que tel:

producer.employeeCount = Nombre d'employés

au moins dans Grails 2.0.0, cela se traduira par un message plus convivial: « la propriété Nombre d'employés doit être valide nombre." L'utilisation du nom de classe complet (par exemple com.example.domain.Client.employeeCount), avec ou sans ".label" à la fin, n'a pas fonctionné pour moi.

Espérons que cela aide quelqu'un.

Questions connexes