2011-05-05 55 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可能不喜欢它)