validator

用途

为某字段设置自定义的验证器。

举例

even( validator: {
   return (it % 2) == 0
})

password1( validator: { val, obj -> obj.properties['password2'] == val })

magicNumber( validator: someClosureWithTwoParameters)

// This one assumes you have an error message defined like: // classname.propertyName.custom.error=My error shows arguments {3} and {4} for value {0} otherProperty( validator: { return ['custom.error', arg1, arg2] } )

// The following example does not use custom validation. // A custom message may be defined in messages.properties: // user.login.blank=Please enter a login // which will be used instead of default.blank.message class User { String login static constraints = { login(blank:false) } }

// In the following example, custom validation is used: // user.login.validator.invalid=Please enter a login class User { String login static constraints = { login(validator: { return (it.length != 0) }) } }

// The following might define the error message as: // user.login.invalid.bountyhunter=Invalid bounty hunter ({2}) tried to log in. (Class name = {1}. Property name = {0}) class User { String login static constraints = { login(validator: { if (!it.startsWith('boba')) return ['invalid.bountyhunter'] }) } }

描述

用闭包或程序块定义验证器。一个或没有参数闭包可以接受要验证的值;两个参数的闭包接受值和对象引用;三个参数的闭包接受值、对象引用和错误对象。

闭包可以返回下列值:

如果闭包有三个参数,则它的返回值会被忽略掉,闭包负责处理好传入的错误对象。

闭包还可以通过propertyName拿到当前正在验证的属性的名字:

myField(validator: { val, obj -> return propertyName == "myField" })

错误代码:className.propertyName.validator.error