2014-09-19 2 views
0

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

class Employee { 

     String name 
     String primaryEmail 
     String url 

     static constraints = { 
      name blank: false 
      primaryEmail email: true, unique: true 
      url blank: false, url: true 

     } 

    } 

Я хочу, чтобы определить имена сообщений, которые должны быть возвращены в случае отказа проверки, что-то подобное:

class Employee { 

     String name 
     String primaryEmail 
     String url 

     static constraints = { 
      name blank: false 'employee.invalid.name' 
      primaryEmail email: true, unique: true 
      url blank: false, url: true 'employee.invalid.email' 

     } 

    } 

Возможно ли это каким-то образом? Спасибо!

ответ

1

Определение собственных сообщений на самом деле довольно просто. Однако ваш подход здесь неверен.

Во-первых, взгляните на validation reference, чтобы понять, как строятся коды сообщений проверки.

Используя ваш пример, некоторые из ваших пользовательских сообщений будут:

employee.name.blank=Custom message about invalid employee due to blank 
employee.url.blank=Another custom message about blank url 
employee.url.url.invalid=Custom invalid url message 

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

1

Вы можете сделать это, указав пользовательский валидатор. Это в основном закрытие, которое принимает до трех параметров. Таким образом, в вашем примере вы могли бы написать:

class Employee { 

    String name 
    String primaryEmail 
    String url 

    static constraints = { 
     name validator: { 
      if (!it) return ['employee.invalid.name'] 
     } 
     primaryEmail email: true, unique: true 
     url validator: { 
      if (!it) return ['employee.invalid.email'] 
     } 
    } 

}

Примечания о пользовательских закрытии валидатора: если нет Титулов, предоставляемых то вы можете получить доступ к стоимости имущества с неявными переменной документ:

validator: { 
    if (!it) ... 
} 

Если вы предоставляете два параметра, тогда первый параметр является значением свойства, второй - проверяемым экземпляром класса домена (например, чтобы вы могли проверить другие параметры).

validator: {val, obj -> 
    if (val && obj.otherProp){...} 
} 

Если вы предоставите три Params, то первые две такие же, как две версии Params и и третья весна Ошибки объекта:

validator: {val, obj, err -> 
    if (val && obj.otherProp){...} 
} 

Для более подробного объяснения ознакомьтесь с Docs: http://grails.org/doc/latest/ref/Constraints/validator.html