Grails的领域类验证(约束属性),也就是domain类的`constraints`闭包,用作各个字段的验证校验,Grails共提供了16个输入校验和一个自定义校验。
`constraints`
[blank](#gblank)...........空
[creditCard](#creditCard)......信用卡格式
[email](#email)...........email格式
[inList](#inList)..........指定范围
[matches](#matches).........正则限制
[max](#max).............最大值(实现Comparable接口的类型)
[maxSize](#maxSize).........集合的最大值
[min](#min).............最小值(实现Comparable接口的类型)
[minSize](#minSize).........集合的最小值
[notEqual](#notEqual)........排除(不能与设定的值相同)
[nullable](#nullable)........是否为空
[range](#range)...........限定范围
[scale](#scale)...........小数位数
[size](#size)............限定集合或字符串长度
[unique](#unique)..........唯一性
[url](#url).............URL格式
[validator](#validator).......自定义验证
##__1. blank__
* __作用__:
定义一个字段是否能够为空
* __用法__:
class User {
static constraints = {
name(blank:false)
email(blank: true)
age(blank: false)
}
String name
String email
Integer age
}
##__2. creditCard__
* __作用__:
验证是否为有效的信用卡账号
* __用法__:
class User {
static constraints = {
cardNumber(creditCard: true)
}
String cardNumber
}
##__3. email__
* __作用__:
验证是否为有效的邮箱帐号
* __用法__:
class User {
static constraints = {
email(email: true)
}
String email
}
##__4. inList__
* __作用__:
验证是否是指定的数组中的选项,在页面的显示为Drop-down box,选项为`inList`中指定的value
* __用法__:
class User {
static constraints = {
list(inList: ['aaa','bbb','ccc'])
}
String list
}
##__5. matches__
* __作用__:
验证一个字符串是否符合某个正则表达式
* __用法__:
class User {
static constraints = {
name(matches:"[a-zA-Z]+")
}
String name
}
##__6. max__
* __作用__:
设定一个实现了`java.lang.Comparable`接口的类行做为自己的最大值类型,同时,该类型必须也是自身的类型
* __用法__:
class User {
static constraints = {
age(max:100)
date(max:new Date())
}
Integer age
Date date
}
##__7. maxSize__
* __作用__:
设置一个集合或者字段的最大值
* __用法__:
class User {
static constraints = {
people(maxSize:100)
}
Integer people
}
##__8. min__
* __作用__:
功能和`max`相反,设置和`max`一样
* __用法__:
class User {
static constraints = {
age(min:18)
date(min:new Date())
}
Integer age
Date date
}
##__9. minSize__
* __作用__:
功能和`maxSize`相反,设置和`maxSize`一样
* __用法__:
class User {
static constraints = {
people(minSize:10)
}
Integer people
}
##__10. notEqual__
* __作用__:
验证输入的用户名不能和指定的用户名一致
* __用法__:
class User {
static constraints = {
name(notEqual: "zhangsan")
}
String name
}
##__11. nullable__
* __作用__:
验证是否可以为`null`,注意`空`和`null`的区别
* __用法__:
class User {
static constraints = {
name(nullable: false)
}
String name
}
##__12. range__
* __作用__:
设置一个字段的范围
* __用法__:
class User {
static constraints = {
age(range:18..100)
}
Integer age
}
##__13. scale__
* __作用__:
版本0.4才开始出现的约束属性。
根据设定的scale数值,自动把浮点型数字小数点后的位数调整为设定的值。
适用于以下数值类型:`java.lang.Float`, `Java.lang.Double`, `Java.math.BigDecimal` (及其子类)。
* __用法__:
class User {
static constraints = {
price(scale: 2)
}
Double price
}
##__14. size__
* __作用__:
规定一个数值,集合或者字符串长度的大小。
在版本0.5中不被建议用在数字类型的属性上,改用`range`。
如果`blank`设为`true`或者`nullable`设为`true`,不能使用这个约束属性。
* __用法__:
class User {
static constraints = {
name(size:5..10)
}
String name
}
##__15. unique__
* __作用__:
设置属性是否必须为唯一
* __用法__:
class User {
static constraints = {
name(unique: true)
}
String name
}
##__16. url__
* __作用__:
如果属性为一个URL地址,则设为`true`。
* __用法__:
class User {
static constraints = {
url(url: true)
}
String url
}
##__17. validator__
* __作用__:
在闭包里设定自定义的验证
* __用法__:
class User {
static constraints = {
repassword(validator: {val, obj ->
if (obj.password != val) {
return "Repassword is not right"
}
})
}
String password
String repassword
}
合理使用`constraints`后,生成的脚手架会自动进行验证
验证信息的内容,在`i18n`目录下,可以找到相应的语言进行更改,别忘使用java的`native2ascii`编码工具转换成相应编码格式