我有一堆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命令行为?
答案 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文件夹中。
看一下上面提到的博客文章,这是对这个主题的一个非常好的介绍。