Typemismatch mit L18N Etikett statt Attributnamen
-
21-09-2019 - |
Frage
Meine message.properties enthält diese standardmäßig:
sein typeMismatch.java.lang.Double = Die Eigenschaft {0} muss eine gültige Zahl sein
Platzhalter {0} wird durch die Attributnamen ersetzt. Ich möchte das Label verwenden, die für das Frontend wie diese genutzt werden:
sein typeMismatch.java.lang.Double = Die Eigenschaft {wunderbares Etikett hier} muss eine gültige Zahl sein.
Mein erster Versuch:
seine typeMismatch.java.lang.Double = Property $ {Nachricht (Code: '0')}. Muss eine gültige Zahl sein
arbeitet Ursache nicht gibt es keine ‚0‘ Nachricht. Die Dokumentation ist in diesem Punkt nicht klar. Jeder bekam eine Idee für diese?
Edit:
Nun, ich kann eine Fehlermeldung für jedes Attribut wie folgt schreiben:
typeMismatch.Book.booknumber = Objekt Booknumber muss eine gültige Zahl sein.
Aber das scheint wie eine Menge zusätzlicher Arbeit ...
Lösung
gemacht Also habe ich einen kleinen Fehler gemacht .. es ist damm einfach jetzt ... Ich kann es hier beantworten werde. Vielleicht in dieser jemand läuft:
Mein Fehler war:
typeMismatch.java.lang.Double=Property {0} must be a valid number
{0} ersetzt wurde durch die Attribute Name.
Der Grund dahinter war, dass Grails API rendererror für die korrekten Klassennamen sucht und Eigenschaften.
Beispiel:
meine Klasse namens Buch und Objektnummer ist.
In meinen Nachrichteneigenschaften:
book.number = Booknumber
Für i18n alles hat gut funktioniert, aber wenn die Fehlermeldung auftritt, hat es zeigt die folgende:
"Property number must be a valid number."
Correct Version in Nachrichteneigenschaften:
Book.number = Booknumber
Werke für mich jetzt. : -)
Andere Tipps
Awesome! Vielen Dank für Ihren Beitrag! Wenn es auf dem ersten nicht Arbeit für mich getan hat, dauerte es einige Zeit, zu erkennen, dass ich vor dem Eigenschaftsnamen die vollständig qualifizierten Klassennamen verwenden benötigt. So lautet die Syntax:
package.ClassName.propertyName=Label
Sehr hilfreich! Danke noch einmal! Al
Spring Datenbindung Fehler Validatoren wollen ( „{0}“ muss eine gültige Zahl sein) fullClassName.fieldName
Kurzklassennamen und / oder .label nicht erkannt werden, finden Sie org.springframework.validation.DefaultBindingErrorProcessor#getArgumentsForBindError
Grails Validatoren ( "{0} muss eine gültige E-Mail-Adresse sein") wollen FQClassName.fieldName.label
oder classPropertyName.fieldName.label
Hinzufügen .label
ist ein Muss, wie aus org.codehaus.groovy.grails.validation.AbstractConstraint#rejectValueWithDefaultMessage
Daher müssen Sie sowohl FQN/shortClassName.attributeName.label
und FQN.attributeName
die gleichen übersetzbar menschenfreundlichen Namen in beiden Validierungen zu erhalten.
Ein weiterer Hinweis, falls es die nächste Person hilft, wenn Sie eine unfreundliche Fehlermeldung bekommen wie „Property producer.employeeCount muss eine gültige Zahl sein“ versuchen, eine Eigenschaft Hinzufügen einfach producer.employeeCount zu Ihrer messages.properties Datei mit dem Namen , wie zum Beispiel:
producer.employeeCount = Anzahl der Mitarbeiter
Mindestens in Grails 2.0.0, dies in einer freundlicheren Meldung resultieren: „Luxusgut Mitarbeiter muss eine gültige Zahl sein“
Mit den vollständig qualifizierten Klassennamen (zum Beispiel com.example.domain.Client.employeeCount), mit oder ohne „.label“ am Ende nicht für mich arbeiten.
Hope, das hilft jemand.