Пользовательские объекты команды Grails Проверка кодов сообщений
При использовании командных объектов, таких как:
class UserCommand {
String name
static constraints = {
name blank: false, unique: true, minSize: 3
}
}
Вы можете использовать их для проверки объектов, не делая их постоянными. В моем случае я бы проверил для постоянного класса User.
В контроллере:
def save(UserCommand cmd) {
if(!cmd.validate()) {
render view: "create", model: [user: cmd]
return
}
def user = new User()
user.name = cmd.name
user.save()
redirect uri: '/'
}
в messages.properties:
user.username.minSize.error=Please enter at least three characters.
userCommand.username.minSize.error=Please enter at least three characters.
При использовании пользовательских сообщений проверки вы должны написать коды сообщений для каждой ошибки дважды. Один для класса User и другой для класса UserCommand.
Есть ли способ, как я могу иметь только один код сообщения для каждой ошибки?
2 ответа
Я могу ошибаться, но если вы используете только стандартные ограничения Grails, единственный способ поделиться сообщением проверки - просто положиться на default.x.x.message
ключ / значения в messages.properties. В противном случае сообщения ищутся через следующую форму ключа:
className.propertyName.errorcode...=
Однако вы можете использовать пользовательский валидатор и переопределить, какой ключ сообщения возвращается для ошибки валидации.
class User {
...
static constraints = {
...
name blank: false, unique: true, validator: { value, user ->
if(!value || value.length() < 3)
return 'what.ever.key.in.messages.properties'
}
}
}
Затем вы можете сохранить все СУХОЕ, разделяя ограничения между классами через глобальное ограничение или, как упоминалось в @dmahapatro, с использованием importFrom
в вашей UserCommand вот так,
class UserCommand {
...
static constraints = {
importFrom User
...
}
}
Если у вас более сложная проверка, вы можете создать свои собственные классы ограничений. Вот некоторые ресурсы:
http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/ http://blog.swwomm.com/2011/02/custom-grails-constraints.html
- использование уникальных ограничений в CommandObject не имеет смысла, потому что уникальность того, что он будет проверять?
- вы можете проверять объекты домена, не сохраняя их точно так же, как объекты команды - используя метод validate()
Вы можете поместить объект User в объект команды, установить ограничения только для класса домена, а затем проверить объект User, являющийся частью объекта команды.
class User { String name static constraints = { name blank: false, unique: true, minSize: 3 } } class UserCommand { User user static constraints = { user validator: { it.validate() } } } user.username.minSize.error=Please enter at least three characters.