我們如何向Groovy類的屬性添加一些常見約束(即maxLength,nullable)?我知道我們可以在Grails領域類中實現,但如果這是Groovy類(我將它用作我的Grails項目的DTO類),它有可能嗎?
非常感謝!爲Groovy類的屬性添加約束(不是Grails域類!)
回答
您可以爲命令類添加約束。如果一個命令類與一個控制器在同一個.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
屬性中提供(按照域類)。
對於單元測試,你然後可以使用@TestMixin(ControllerUnitTestMixin)和mockForConstraintsTests。這與用於域對象的典型@TestFor註釋不同。 – 2012-05-26 15:25:59
使用grails Command Object可能是您最好的選擇。它有約束和驗證,但沒有數據庫支持。它通常是控制器使用的值對象,但是您可以在控制器之外實例化一個控制器,而不會出現任何問題。
不確定這是否與您的使用相關(我對DTO不熟悉),但在當前版本(2.3.8)中,您還可以將Grails約束添加到抽象類,並且它們將被擴展它的領域。你的IDE可能不喜歡它)
- 1. Grails/Groovy域類的繼承性演變
- 2. NHibernate標準:爲屬性類型添加一個約束條件
- 3. 從基類繼承Grails域類屬性
- 4. Grails域類的屬性攔截
- 5. Grails和Groovy元類包名稱約定
- 6. Grails - 不能添加一個自定義驗證器的域類中的屬性
- 7. Grails領域約束定義
- 8. Grails的 - 在子類的唯一約束
- 9. Grails域對象包括類屬性
- 10. Grails,從gsp更改域類屬性
- 11. 如何在Grails中的域類中建立關係約束?
- 12. Grails - 如何讓域類將JSON轉換爲域屬性
- 13. 約束屬性給定類型的屬性
- 14. Grails域類可以從不是域類的類繼承嗎?
- 15. 哪些小部件約束對Grails域類有效?
- 16. 如何獲取Grails域對象的屬性的類型(類)?
- 17. Symfony的 - 在一個領域約束類
- 18. 添加類裝飾器的類屬性
- 19. 屬性與約束
- 20. Grails的validateable不是非持久域類
- 21. 的Grails:服務VS Groovy類
- 22. Grails領域約束映射到PostgreSQL吉斯特約束
- 23. 添加類屬性在Python
- 24. 通用類約束其中<T>是約束通用類的類型
- 25. 類約束
- 26. 約束不能是特殊類'System.Object'
- 27. 類型參數約束是一個類
- 28. 的Grails GORM約束
- 29. 爲什麼類型約束不夠?
- 30. 添加CHECK約束在SQL Server:添加約束VS添加復
類似的問題:http://stackoverflow.com/questions/4448556/grails-validateable-not-work-for-non-persistent-domain-class – 2011-05-24 08:03:28