20130515-Grails In Action-3、建模(02小节)

上一节建立一个User domain对象,这一节主要了解怎么样对对象的属性进行验证

1、对象验证

在User对象中增加数据验证

1     static constraints = {
2         userId(size:3..20, unique: true)
3         password(size: 6..8)
4         homepage(url: true, nullable: true)
5     }

2、测试验证代码

com.grailsinaction.UserIntegrationTests

 1     /**
 2      * 测试验证
 3      */
 4     @Test
 5     void testEvilSave() {
 6         def user = new User(userId: 'chuck_norris',    password: 'tiny', homepage: 'not-a-url')
 7         assertFalse user.validate()
 8         assertTrue user.hasErrors()
 9         def errors = user.errors
10         assertEquals "size.toosmall", errors.getFieldError("password").code
11         assertEquals "tiny", errors.getFieldError("password").rejectedValue
12         assertEquals "url.invalid",    errors.getFieldError("homepage").code
13         assertEquals "not-a-url", errors.getFieldError("homepage").rejectedValue
14         assertNull errors.getFieldError("userId")
15     }

这段代码的关键点是:

assertFalse user.validate()

这句代码,直接调用User对象的validate()方法,就可以检查User对象的验证内容,所以,在其他service或者controller中都可以调用该方法完成验证,如:

1     if (user.validate()) {
2         user.save()
3     } else {
4         user.discard()
5     }

3、验证,修正测试

 1     /**
 2      * 验证并修正、保存
 3      */
 4     @Test
 5     void testEvilSaveCorrected() {
 6         def user = new User(userId: 'chuck_norris',    password: 'tiny', homepage: 'not-a-url')
 7         assertFalse(user.validate())
 8         assertTrue(user.hasErrors())
 9         assertNull user.save()
10         
11         user.password = "fistfist"
12         user.homepage = "http://www.chucknorrisfacts.com"
13         assertTrue(user.validate())
14         assertFalse(user.hasErrors())
15         assertNotNull user.save()
16     }

4、以下为一些常用的验证方法:

常用标准验证
约束名称描述例子错误属性
blank验证字符串不能为空password(blank:false)blank
email验证内容是否为email地址userEmail(email:true)email.invalid
inList验证值是否在这个集合的范围内

country(inList:['Australia','England')

not.inList
matches表达式匹配

userId(matches: '[0-9]{7}[A-Za-z]')

matches.invalid
maxSize范围最大值验证orderQuantity(maxSize:100)maxSize.exceeded
minSize范围最小值验证orderQuantity(minSize:10)minSize.notmet
nullable是否允许为空password(nullable: false)nullable
size给值指定一个范围userId(size:3..20)

size.toosmall或者size.toobig

unique唯一性检查userId(unique:true)unique
url是否为一个有效的URL地址homepage(url:true)

url.invalid

validator可以通过一个闭包自定义验证5、6专门涉及

validator.error

5、使用正则表达式,进行自定义验证

如:用户ID只允许是7个数字后面跟一个字母

1 static constraints = {
2     userId(matches: '[0-9]{7}[A-Za-z]')
3 }

6、再复杂一点的组合自定义验证

用户密码必须是6-8位,并且账号和密码不能相等

1 static constraints = {
2     password(size: 6..8, validator: { passwd, user ->
3         return passwd != user.userId
4     })
5     homepage(url: true, nullable: true)
6 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值