2011-05-05 54 views
0


我們如何向Groovy類的屬性添加一些常見約束(即maxLength,nullable)?我知道我們可以在Grails領域類中實現,但如果這是Groovy類(我將它用作我的Grails項目的DTO類),它有可能嗎?
非常感謝!爲Groovy類的屬性添加約束(不是Grails域類!)

+0

類似的問題:http://stackoverflow.com/questions/4448556/grails-validateable-not-work-for-non-persistent-domain-class – 2011-05-24 08:03:28

回答

6

您可以爲命令類添加約束。如果一個命令類與一個控制器在同一個.groovy文件中(在Groovy中,每個.groovy文件中都可以有多個公共類),您不需要爲Grails做任何特殊的事情就可以將其命名爲命令類。但是,如果您的命令類在其他位置(例如,在src/groovy下),則需要使用@Validateable對其進行註釋,並將軟件包名稱添加到Config.groovy中的參數grails.validateable.packages。下面是不是在同一個文件作爲控制器

pacakge com.example.command 

@Validateable 
class Person { 
    Integer age 
    String name 

    static constraints = { 
    name(blank: false) 
    age(size 0..100) 
    } 
} 

一個命令的例子添加以下Config.groovy

grails.validateable.packages = ['com.example.command'] 

Command類已通過的Grails添加了validate()方法。在調用此方法後,任何錯誤將在errors屬性中提供(按照域類)。

+0

對於單元測試,你然後可以使用@TestMixin(ControllerUnitTestMixin)和mockForConstraintsTests。這與用於域對象的典型@TestFor註釋不同。 – 2012-05-26 15:25:59

1

使用grails Command Object可能是您最好的選擇。它有約束和驗證,但沒有數據庫支持。它通常是控制器使用的值對象,但是您可以在控制器之外實例化一個控制器,而不會出現任何問題。

0

不確定這是否與您的使用相關(我對DTO不熟悉),但在當前版本(2.3.8)中,您還可以將Grails約束添加到抽象類,並且它們將被擴展它的領域。你的IDE可能不喜歡它)