假如我们在程序中使用了一个command对象,在Grails2.0之后的版本中引入了新的机制,可以复用constraints块的代码,重用约束,如下面的例子:
class User { String firstName String lastName String passwordHash static constraints = { firstName blank: false, nullable: false lastName blank: false, nullable: false passwordHash blank: false, nullable: false } }
上面的代码时一个标准的domain对象,假如我们要在页面中增加一个密码验证,常用的办法是增加一个类似的command对象,代码如下:
class UserCommand { String firstName String lastName String password String confirmPassword static constraints = { importFrom User password blank: false, nullable: false confirmPassword blank: false, nullable: false } }
上面的代码修改了password为没加密的密码,新增加了一个confirmPassword属性,其他的和domain对象一样,包括约束也应该一样,所以这里可以使用importFrom User重用User的约束
如果不需要完全使用User的约束,可以使用include和exclude参数,include代码指定引入,exclude代表排除,如下:
…static constraints = { importFrom User, include: ["lastName"] …}
上面的代码表示只引入lastName的约束信息
…static constraints = { importFrom User, include: [/.*Name/] …}
上面的代码表示只引入后缀为Name的属性的约束信息,这里还使用了正则表达式。如果使用exclude则反之