0

我有一堆 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 命令行为?

4

2 回答 2

2

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

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

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

于 2011-04-07T20:28:14.950 回答
0

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

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 文件夹中。

看看上面提到的博文,对这个话题做了很好的介绍。

于 2011-04-15T06:40:45.470 回答