Проблема Grails с пользовательскими сообщениями об ошибках
-
15-09-2020 - |
Вопрос
В настоящее время я пытаюсь указать собственные сообщения об ошибках в 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, это должно работать правильно как с именем пакета, так и без него — имя_класса.имя_свойства.пустое.
grails.org/doc/latest/ (раздел ограничений) и (раздел 7.4 – проверка и интернационализация)
Я пробовал все комбинации, которые только мог придумать, но всегда отображалось специальное сообщение.
Я также попробовал установить плагин шаблонов Grails i18n.
http://www.grails.org/I18n+Templates+Plugin
который автоматически генерировал для меня коды ошибок.Я добавил новые коды ошибок в конец существующего файла messages.properties, но по-прежнему получаю сообщения об ошибках по умолчанию.
Однако с кодами ошибок, генерируемыми плагином, было что-то другое.
вместо формата, указанного в документе Grails — test.name.null=......, автоматически генерируется test.name.null.error=Custom Message.
Я также пытался полностью удалить сообщения об ошибках по умолчанию, но они все равно отображаются.
Если кто-нибудь сталкивался с этой проблемой раньше, я был бы признателен за любую помощь, которую кто-нибудь может мне оказать.
заранее спасибо
Решение
Положите Def Moversource (в контроллере или услуге)
item.errors?.allErrors?.each{
println messageSource.getMessage(it, null)
};
.
Я также нашел хорошую ссылку, которая объясняет это лучше
http://johnrellis.blogspot.com/2010/02 / Retrov-Grails-Domain-errors-oom.html
Другие советы
Что ж, в документации показан пример того, как переопределить сообщения для одного из ограничений проверки по умолчанию (пустое, допускающее значение NULL, минимальное, максимальное, размер, диапазон и т. д.).Но он не предлагает вам просмотреть документацию для каждого ограничения, а внизу показано, какой ключ следует использовать:
Код ошибки: Имя класса.Имя свойства.размер.toosmall или ИмяКласса.ИмяСвойства.размер.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= Эй, вот!слишком маленький:[{0}] класса [{1}] со значением [{2}] не попадает в допустимый диапазон размеров от [{3}] до [{4}]
com.example.User.username.size.toobig= Эй, вот!слишком большой:[{0}] класса [{1}] со значением [{2}] не попадает в допустимый диапазон размеров от [{3}] до [{4}]
Может быть, что ваши ограничения не статичны - оно должно быть указано как «статические ограничения= {...»
Также обратите внимание, что отнутреннее значение по умолчанию для false, чтобы вам не нужно указывать.
Я использую полностью квалифицированные имена классов в моих сообщениях. Процессии
com.shareyourlove.User.password.blank=Some custom message
. Это сработало для меня
com.model.Customer.name.nullable.error = Custom message
.
вместо
com.model.Customer.name.blank = Custom message
.