假如咱們在程序中使用了一個command對象,在Grails2.0以後的版本中引入了新的機制,能夠複用constraints塊的代碼,重用約束,以下面的例子:正則表達式
<!-- lang: groovy --> 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對象,代碼以下:dom
<!-- lang: groovy --> 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表明排除,以下:code
<!-- lang: groovy --> … static constraints = { importFrom User, include: ["lastName"] … }
上面的代碼表示只引入lastName的約束信息對象
<!-- lang: groovy --> … static constraints = { importFrom User, include: [/.*Name/] … }
上面的代碼表示只引入後綴爲Name的屬性的約束信息,這裏還使用了正則表達式。若是使用exclude則反之ast