Проблема Grails с пользовательскими сообщениями об ошибках

StackOverflow https://stackoverflow.com/questions/3250667

Вопрос

В настоящее время я пытаюсь указать собственные сообщения об ошибках в 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
.

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