0

Grailsコントローラーのコマンドクラスとして使用したいJavaクラスがたくさんあります。典型的な例は次のとおりです。

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 のメタプログラミング機能を使用してこれを実現できます。検証するすべての Java クラスにBootstrap.groovy静的クロージャーを追加できます。contraintsまた、クラスに で注釈を付けます@Validateable。次に例を示します。

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

その後、これらのクラスをCommand クラスのように処理して検証します。

于 2011-04-07T20:28:14.950 に答える
0

実際、Groovy は、Peter Ledbrook (SpringSource) によって説明されているように、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 に答える