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']
})
}
}
描述
用闭包或程序块定义验证器。一个或没有参数闭包可以接受要验证的值;两个参数的闭包接受值和对象引用;三个参数的闭包接受值、对象引用和错误对象。
闭包可以返回下列值:
null
或 true
表明验证的值是有效的
false
表明值无效并用默认的错误代码
- "classname.propertName.错误代码" 错误代码用来获取错误信息,如果获取不到,会从全局的错误信息中获取。
- 一个包涵错误代码加上任意数量其他参数的list 参数可以在上面3种格式化的信息内使用,参考
grails-app/i18n/message.properties
章节了解默认的错误信息如何使用参数。
如果闭包有三个参数,则它的返回值会被忽略掉,闭包负责处理好传入的错误对象。
闭包还可以通过propertyName
拿到当前正在验证的属性的名字:
myField(validator: { val, obj -> return propertyName == "myField" })
错误代码:className.propertyName.validator.error