Проблема с Grails с настраиваемыми сообщениями об ошибках
В настоящее время я пытаюсь указать пользовательские сообщения об ошибках в grails для ограничений по умолчанию, но до сих пор все, что я возвращаю, это сообщение об ошибке по умолчанию.
Я знаю, что мне нужно отредактировать файл grails-app/i18n/messages.properties
Если я изменю следующее сообщение об ошибках по умолчанию, оно правильно отобразит новое сообщение об ошибке
default.blank.message=Property [{0}] of class [{1}] cannot be blank
Однако это не то, что я пытаюсь сделать. Мне нужно более подробное сообщение об ошибках и иметь более одного поля, которое может быть пустым и т.д. То, что я хотел бы сделать, было бы, отображать пользовательские сообщения для каждого поля в классе
package com.mycompany.myapp
class Test{
String name
def constraints = {
name(nullable:false, blank:false)
}
}
(следующие коды, добавленные к концу messages.properties)
test.name.blank=Name cannot be blank
test.name.nullable=Name cannot be nullable
В соответствии с документацией grails это должно работать правильно, либо с именем пакета - className.propertyName.blank
grails.org/doc/latest/(раздел ограничений) и (раздел 7.4 - валидация и интернационализация)
Я пробовал все сочетания, о которых я могу думать, но всегда отображает пользовательское сообщение
Я также попытался установить плагин grails i18n templates
http://www.grails.org/I18n+Templates+Plugin
который автоматически генерировал коды ошибок для меня. Я добавил новые коды ошибок в конец существующего файла messages.properties, но я все еще получаю сообщения об ошибках по умолчанию.
Однако с кодами ошибок, которые были созданы плагином, было что-то другое.
вместо формата, указанного в grails doc - test.name.null =......, он автоматически сгенерирован test.name.null.error = Пользовательское сообщение
Я также попытался полностью удалить сообщения об ошибках по умолчанию, но они все еще отображаются
Если кто-то испытал этот вопрос раньше, я был бы признателен за любую помощь, которую любой может мне дать
Заранее спасибо
Ответы
Ответ 1
введите def messageSource (в контроллер или службу)
item.errors?.allErrors?.each{
println messageSource.getMessage(it, null)
};
Я также нашел хорошую ссылку, которая объясняет это лучше
http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html
Ответ 2
Хорошо, документация показывает вам пример переопределения сообщений для одной из ограничений проверки по умолчанию (пустая, обнуляемая, минимальная, максимальная, размерная, диапазон и т.д.). Но он не может сказать вам посмотреть в документации по каждому ограничению, а внизу он показывает вам, какой ключ следует использовать:
Код ошибки: className.propertyName.size.toosmall или className.propertyName.size.toobig
для ограничения размер http://grails.org/doc/latest/ref/Constraints/size.html
Итак, для
package com.example
class User {
String username
static constraints = {
username size:5..15
}
}
использование:
com.example.User.username.size.toosmall= Yo there! слишком мал: [{0}] класса [{1}] со значением [{2}] не подпадает под допустимый диапазон размеров от [{3}] до [{4}]
com.example.User.username.size.toobig= Yo there! слишком большой: [{0}] класса [{1}] со значением [{2}] не подпадает под допустимый диапазон размеров от [{3}] до [{4}]
Ответ 3
Возможно, ваши ограничения не являются статическими - его следует указывать как "static constraints = {..."
Также обратите внимание, что значение nullable по умолчанию равно false, поэтому вам не нужно указывать его.
Ответ 4
Я использую полностью квалифицированные имена классов в своих сообщениях .properties
com.shareyourlove.User.password.blank=Some custom message
Ответ 5
Это сработало для меня
com.model.Customer.name.nullable.error = Custom message
вместо
com.model.Customer.name.blank = Custom message