`

Grails的域类验证详解

阅读更多

本文参考:http://hi.baidu.com/javacookies/blog/item/18fc2a3d30181ccf9e3d62b1.html

在Grails里,可以通过定义约束属性来验证一个领域类的实例。约束属性在一个叫"constraints"闭包的定义。可以为领域类里的每个属性定义约束。

class TUser {
    String name
    String password
    String demo
    String help
   
    String toString(){
        "$name:$password"
    }
   
    static constraints = {
        name(blank: false)
        password(blank: false,size: 6 .. 16)
        demo(blank: true,nullable: true)
        help(blank: true,nullable: true)
    }
}


constraints 必须声明为static。

同时,每个属性的约束属性都有与之对应的错误消息(Error message code),当表单未能通过验证的时候,将会返回这些错误消息。
这些错误消息在grails-app/i18n/message.properties里定义。
例如我们要让User的email为空时返回"Please enter your email",则可以在message.properties定义:
user.email.blank=Please enter your email
如果用户没有自定义错误消息,系统则会用默认的设置。当然默认的消息肯定不会是你想要的......

Grails提供很多验证属性,可以满足一些基本的验证需求:

blank
验证属性能否为空,不允许为空则设为false。
Note: 如果在form里为空而提交,则属性的值是一个空字符串,而不是null。
Example: login(blank:false)
Error message code: className.propertyName.blank

creditCard
如果要求属性为信用卡号码,则设为true。
Example: cardNumber(creditCard:true)
Error message code: className.propertyName.creditCard.invalid

email
如果要求属性为emial地址,则设为true。
Example: contactEmail(email:true)
Error message code: className.propertyName.email.invalid

inList
如果要求属性的值必须为规定的值,则定义规定的值。
Example: name(inList:"Joe", "Fred", "Bob" )
Error message code: className.propertyName.not.inList

length
约束字符串或者数组的长度。
这个约束属性在0.5版本是被取消,用size代替。
Example: login(length:5..15)
Error message code:
className.propertyName.length.toolong
className.propertyName.length.tooshort

matches
应用正则表达式对字符串进行验证。
Example: login(matches:"a-zA-Z +")
Error message code: className.propertyName.matches.invalid

max
设定属性的最大值,值的类型必须跟属性一样。
Example:
age(max:new Date())
price(max:999F)
Error message code: className.propertyName.max.exceeded

maxLength
设定字符串或者数组的最大长度。
在0.5版本中被取消,由maxSize代替。
Example: login(maxLength:5)
Error message code: className.propertyName.maxLength.exceeded

maxSize
设定一个数字或者集合的最大大小。
在0.5版本中不被建议用在数字上,改用max。
Example: children(maxSize:25)
Error message code: className.propertyName.maxSize.exceeded

min
设定属性的最小值。类型必须跟属性一致。
Example:
age(min:new Date())
price(min:0F)
Error message code: className.propertyName.min.notmet

minLength
设定字符串属性或者数组属性的最小长度。
在0.5版本中被取消,由minSize代替。
Example: login(minLength:5)
Error message code: className.propertyName.minLength.notmet

minSize
设定一个数字或者集合的最小大小。
在0.5版本中不被建议用在数字属性上,改用min。
Example: children(minSize:5)
Error message code: className.propertyName.minSize.notmet

notEqual
验证属性的值是否跟指定的值相等。
Example: login(notEqual:"Bob")
Error message code: className.propertyName.notEqual

nullable
如果属性不可以为null,则设为false。
Note: 如果在表单里未填任何东西而提交时,则作为request parameter,属性的值为一个空字符串,而不是null。
Example: age(nullable:false)
Error message code: className.propertyName.nullable

range
限制属性的值在指定的范围里。
Example: age(range:minAge..maxAge)
Error message code:
className.propertyName.range.toosmall
className.propertyName.range.toobig

scale
版本0.4才开始出现的约束属性。
根据设定的scale数值,自动把浮点型数字小数点后的位数调整为设定的值。
适用于以下数值类型:java.lang.Float, Java.lang.Double, and Java.math.BigDecimal (and its subclasses)。
Example: salary(scale:2)
Error message code: 不返回错误信息

size
规定一个数值,集合或者字符串长度的大小。
在版本0.5中不被建议用在数字类型的属性上,改用range。
Example: children(size:5..15)
Note: 不能使用这个约束属性如果blank设为true或者nullable设为true。
Error message code:
className.propertyName.size.toosmall
className.propertyName.size.toobig

unique
如果属性必须为唯一,则设为true。
Example: login(unique:true)
Note: 有可能会发生通过unique验证但是在随后的数据库储存出现错误的情况。预防这种情况发生的方法是使用连续事务隔离级别或者进行eception的处理。
从版本0.5开始,unique的范围(Scope)可以被指定。"Scope"是同一个类里其他属性的名字,或者这些属性名字的一个list。
Example: group(unique:'department')
上面的例子里group名在一个department里是唯一的,但是可能在其他department里有相同名字的groups。
Another Example: login(unique:'group','department' )
在这个例子,login在group和department里必须是唯一的。可能在不同等group和department里会有相同的login。
Error message code: className.propertyName.unique

url
如果属性为一个URL地址,则设为true。
Example: homePage(url:true)
Error message code: className.propertyName.url.invalid

validator
在闭包里设定自定义的验证。
Example:

even( validator:
{ return

 (it % 2) == 0 }
)
Error message code (default

): className.propertyName.validator.invalid
分享到:
评论
1 楼 px96004 2013-08-22  
谢谢LZ总结

相关推荐

    Grails入门教程(二)

    在设计域类时,我们需要考虑对象之间的关系。例如,在 Member 类中,我们可以添加一个 Team 对象的引用,以表示每个 Member 对象所属的 Team。同时,在 Team 类中,我们可以添加一个 List 对象,以表示 Team 对象...

    Grails Grails Grails

    **Grails 框架详解** Grails 是一个基于 Groovy 语言的开源Web应用程序框架,它构建在Java平台之上,旨在简化开发过程并提高生产力。Grails 的设计深受Ruby on Rails的影响,提供了MVC(模型-视图-控制器)架构模式...

    grails中文入门简介

    此外,还可以配置自动数据库移植功能,它会在应用启动时根据域类(domain class)结构自动创建数据库表。 Grails的命令行工具非常强大,它支持创建Gant脚本来自动化重复的构建任务。用户可以创建可复用的Grails脚本...

    grails

    grails-2.1.zip.001

    Eclipse下搭建Grails项目

    【Grails项目搭建详解】 Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,但通过以下步骤,即使是初学者也能顺利进行。 1. *...

    在Eclipse里使用Grails类创建工具.pdf

    ### 在Eclipse中高效利用Grails类创建工具 在深入探讨如何在Eclipse环境中使用Grails类创建工具之前,我们先简要回顾一下Grails框架及其核心特性。Grails是一款基于Groovy语言的高性能Web应用开发框架,它遵循约定...

    Grails1.1中文文档

    3. **领域驱动设计(Domain-Driven Design, DDD)**:Grails的域类直接映射到数据库表,文档会解释如何定义领域类、关联关系,以及Lifecycle方法,如`beforeInsert`、`beforeUpdate`等。 4. **服务层**:Grails的...

    grails 中文手册

    - Grails 提供了一套强大的命令行工具,用于快速生成应用结构、控制器、服务、域类等。 - `grails create-app` 创建新应用,`generate-controller` 生成控制器,`generate-domain-class` 生成领域模型。 5. **...

    Grails权威指南 Grails权威指南

    4. **Grails命令行工具**:提供了一系列的命令,如`generate-all`用于自动生成控制器、视图和模型类,极大地提高了开发效率。 5. **Grails插件系统**:Grails拥有庞大的插件库,涵盖各种功能,如安全、缓存、报表、...

    grails login

    **Grails登录系统详解** Grails是一个基于Java的开源Web应用程序框架,它使用Groovy语言进行开发,提供了高效、简洁的编程模型。在Grails中实现用户登录功能是构建任何Web应用的基础,它确保了数据的安全性和用户...

    grails-用户手册

    Grails提供了一套强大的命令行工具,用于快速创建项目、生成控制器、领域类、服务等。例如,`grails create-app` 创建新应用,`generate-controller` 生成控制器,`generate-domain-class` 生成领域类。 四、GORM...

    使用 Grails 快速开发 Web 应用程序

    通过在命令行输入`grails help`验证安装是否成功。 创建Grails应用使用`grails create-app`命令,例如创建名为"Contact"的应用。Grails会自动生成包含默认目录结构的应用程序。目录结构包括`grails-app/conf`存储...

    grails中文参考手册

    使用Grails的命令行工具,你可以快速生成应用程序的基础结构,如创建新的控制器、服务、域类等,这极大地简化了开发流程。 总之,《Grails中文参考手册》覆盖了从安装、创建应用到部署和配置的全过程,对于希望...

    Grails入门指南 -- 针对grails1.0.4更新

    ### Grails入门指南知识点 #### 一、Grails框架简介 - **背景**: Grails是一个基于Groovy语言的开源Web应用框架,适用于Java平台。它旨在简化开发过程,提高开发效率,尤其受到那些希望保留Java环境同时寻求更高效...

    Grails中文参考手册

    Grails 提供了一个强大的命令行工具,用于初始化项目、创建域类、生成控制器、运行测试等。这大大提高了开发效率,减少了手动编写配置文件的工作。 **Testing** Grails 鼓励全面的测试实践,包括单元测试、集成...

Global site tag (gtag.js) - Google Analytics