20130515-Grails In Action-3、建模(02小节)
来源:互联网 发布:python培训视频 编辑:程序博客网 时间:2024/05/16 18:09
上一节建立一个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.errors10 assertEquals "size.toosmall", errors.getFieldError("password").code11 assertEquals "tiny", errors.getFieldError("password").rejectedValue12 assertEquals "url.invalid", errors.getFieldError("homepage").code13 assertEquals "not-a-url", errors.getFieldError("homepage").rejectedValue14 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、以下为一些常用的验证方法:
country(inList:['Australia','England')
not.inListmatches表达式匹配userId(matches: '[0-9]{7}[A-Za-z]')
matches.invalidmaxSize范围最大值验证orderQuantity(maxSize:100)maxSize.exceededminSize范围最小值验证orderQuantity(minSize:10)minSize.notmetnullable是否允许为空password(nullable: false)nullablesize给值指定一个范围userId(size:3..20)size.toosmall或者size.toobig
unique唯一性检查userId(unique:true)uniqueurl是否为一个有效的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.userId4 })5 homepage(url: true, nullable: true)6 }
- 20130515-Grails In Action-3、建模(02小节)
- 20130515-Grails In Action-3、建模(01小节)
- 20130515-Grails In Action-3、建模(03小节)
- 20130515-Grails In Action-3、建模(04小节)
- 20130515-Grails In Action-3、建模(05小节)
- 20130516-Grails In Action-3、建模(06小节)
- 20130516-Grails In Action-4、让模型工作(02小节)
- 20130516-Grails In Action-4、让模型工作(01小节)
- 20130516-Grails In Action-4、让模型工作(03小节)
- 20130516-Grails In Action-4、让模型工作(04小节)
- 20130516-Grails In Action-4、让模型工作(05小节)
- 20130517-Grails In Action-4、让模型工作(06小节)
- Grails in Action:完成啦
- 《Spring Boot in Action》【6. Grails】
- grails obtain controller action
- 《EJB 3 in Action》读书笔记02
- ActiveMQ in Action(3)
- ActiveMQ in Action(3)
- 20130426-Linux试玩随笔-04-CentOS安装
- 20130426-常用站点收藏
- 20130502-Linux试玩随笔-05-Github
- 20130515-Grails In Action-3、建模(01小节)
- win32 sdk inputbox 输入框
- 20130515-Grails In Action-3、建模(02小节)
- 20130515-Grails In Action-3、建模(03小节)
- 20130515-Grails In Action-3、建模(04小节)
- 20130515-Grails In Action-3、建模(05小节)
- 20130516-Grails In Action-3、建模(06小节)
- dp之一维的最大字段和算法
- 20130516-Grails In Action-4、让模型工作(01小节)
- 20130516-Grails In Action-4、让模型工作(02小节)
- 20130516-Grails In Action-4、让模型工作(03小节)