Вопрос

My message.properties содержит это по умолчанию:

typeMismatch.java.lang.Double=Property {0} должно быть допустимым числом

Заполнитель {0} заменяется именем атрибута.Я хочу использовать Ярлык, который используется для интерфейса, следующим образом:

typeMismatch.java.lang.Double=Property {здесь замечательная метка} должно быть допустимым числом.

Моя первая Попытка:

typeMismatch.java.lang.Double=Property ${сообщение(код:'0')} должно быть допустимым числом.

не работает, потому что нет сообщения '0'.Документация на этом этапе неясна.У кого-нибудь есть идея по этому поводу?

Редактировать:

Ну, я могу написать сообщение об ошибке для каждого атрибута следующим образом:

typeMismatch.Book.номер книги = свойство Номер книги должен быть допустимым числом.

Но это похоже на большую дополнительную работу...

Это было полезно?

Решение

Так что я допустил небольшую ошибку..теперь это чертовски просто...Я отвечу на это здесь.Может быть, кто-нибудь столкнется с этим:

Моя ошибка заключалась в:

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

{0} было заменено на Название атрибутов.

Причина этого заключалась в том, что Grails API rendererror ищет правильные имена классов и свойства.

Например:

Мой класс называется Book, а свойство - number .

В свойствах моего сообщения:

book.number = Booknumber

Для i18n все работало нормально, но когда должно появиться сообщение об ошибке, оно показывает следующее:

"Property number must be a valid number."

Правильная версия в свойствах сообщения:

Book.number = Booknumber

Теперь это работает у меня.:-)

Другие советы

Потрясающе!Большое спасибо за ваш пост!Когда поначалу у меня это не сработало, мне потребовалось некоторое время, чтобы понять, что мне нужно использовать полное имя класса перед именем свойства.Таким образом, синтаксис таков:

package.ClassName.propertyName=Label

Очень полезно!Еще раз спасибо!Эл

Валидаторы ошибок привязки данных Spring ("{0}" должно быть допустимым числом) хотят fullClassName.fieldName Короткое имя класса и / или .label не распознаются, см. org.springframework.validation.DefaultBindingErrorProcessor#getArgumentsForBindError

Валидаторы Grails ("{0} должен быть действительный адрес электронной почты") хотят FQClassName.fieldName.label или classPropertyName.fieldName.label Добавление .label является обязательным, как видно из org.codehaus.groovy.grails.validation.AbstractConstraint#rejectValueWithDefaultMessage

Следовательно, вам нужно и то, и другое FQN/shortClassName.attributeName.label и FQN.attributeName чтобы получить одно и то же переводимое имя, понятное для человека, в обеих проверках.

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

Еще один совет, на случай, если это поможет следующему пользователю, если вы получаете недружественное сообщение об ошибке типа "Property producer.employeeCount должно быть допустимым числом", попробуйте добавить свойство с именем просто producer.employeeCount в свой файл messages.properties как таковое:

producer.employeeCount=Количество сотрудников

По крайней мере, в Grails 2.0.0 это приведет к более дружественному сообщению:"Количество сотрудников в собственности должно быть действительным числом".

Используя полное имя класса (например,com.example.domain.Client.employeeCount), с ".label" в конце или без него, у меня не сработало.

Надеюсь, это кому-то поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top