使用Java类作为Grails命令

时间:2011-04-07 10:30:02

标签: grails groovy grails-validation grails-constraints

我有一堆Java类,我想在我的Grails控制器中用作命令类。一个典型的例子是:

class Person {
    String name
    Integer age

    public String getName() {return name;}
    public String getAge() {return age;}
    public void setName(String name) {this.name = name;}
    public void setAge(Integer age) {this.age = age;}
}

我希望能够为此类指定约束,以便我可以在其上调用validate(),并且任何验证错误都将存储在errors属性中。换句话说,它的行为就像常规的Grails命令类一样。

显然我不能直接在.java源文件中声明约束闭包,因为Java不支持闭包。有没有办法可以修改这些类(在运行时),添加Grails命令行为?

2 个答案:

答案 0 :(得分:2)

我没有尝试过这个,但你可以使用Groovy的元编程功能来实现这一点。在Bootstrap.groovy中,您可以将静态contraints闭包添加到要验证的所有Java类。还使用@Validateable为您的课程添加注释。这是一个例子:

Person.metaClass.static.constraints = { name blank: false }

然后将这些类视为Command classes来验证它们。

答案 1 :(得分:0)

事实上,Groovy支持将“约束”约束到Java域类,如Peter Ledbrook(SpringSource)所述:

http://blog.springsource.com/2010/08/26/reuse-your-hibernatejpa-domain-model-with-grails/

如博客文章中所述,您显然无法在Java类中定义约束闭包。但是,您可以通过按照以下命名约定创建Groovy类来附加约束元数据:

  

[package.to.your.dc.MyDomainClass] Constraints.groovy

并将其放在src / java文件夹中。

看一下上面提到的博客文章,这是对这个主题的一个非常好的介绍。