Проблема с 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 = Пользовательское сообщение

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

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

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

Ответы

Ответ 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