Grails Проблема с пользовательскими сообщениями об ошибках - PullRequest
13 голосов
/ 15 июля 2010

В настоящее время я пытаюсь указать пользовательские сообщения об ошибках в граалях для ограничений по умолчанию, но пока все, что я получаю, это сообщение об ошибке по умолчанию.

Я знаю, что мне нужно отредактировать файл 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 - test.name.null = ......, автоматически генерируется test.name.null.error = пользовательское сообщение

Я также попытался полностью удалить сообщения об ошибках по умолчанию, но они по-прежнему отображаются

Если кто-то сталкивался с этой проблемой раньше, я был бы признателен за любую помощь, которую кто-нибудь может мне помочь

Заранее спасибо

Ответы [ 5 ]

18 голосов
/ 17 июля 2010

put def messageSource (в контроллере или сервисе)

item.errors?.allErrors?.each{ 
println  messageSource.getMessage(it, null)
};

Я также нашел хорошую ссылку, которая объясняет это лучше

http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html

7 голосов
/ 05 декабря 2013

Что ж, в документации показан пример того, как переопределить сообщения для одной из ограничений по умолчанию для проверки (пустой, обнуляемый, минимальный, максимальный, размер, диапазон и т. Д.). Но он не говорит вам, чтобы посмотреть в документации для каждого ограничения и в нижней части он показывает вам, какой ключ использовать:

Код ошибки: 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 = Йо! слишком мал: [{0}] класса [{1}] со значением [{2}] не попадает в допустимый диапазон размеров от [{3}] до [{4}]

com.example.User.username.size.toobig = Йо! слишком большой: [{0}] класса [{1}] со значением [{2}] не попадает в допустимый диапазон размеров от [{3}] до [{4}]

0 голосов
/ 24 марта 2016

Это сработало для меня

com.model.Customer.name.nullable.error = Custom message

вместо

com.model.Customer.name.blank = Custom message
0 голосов
/ 15 июля 2010

Я использую полные имена классов в своих сообщениях. Свойства

com.shareyourlove.User.password.blank=Some custom message
0 голосов
/ 15 июля 2010

Возможно, что ваши ограничения не являются статическими - это должно быть указано как «статические ограничения = {...»

Также обратите внимание, что по умолчанию для Nullable устанавливается значение false, поэтому вам не нужно указывать.

...