2

Groovyスクリプトを(Grailsプラグインの一部として)作成していて、プラグインのユーザーが定義する可能性のあるGrailsDomainClassのプロパティのリストを取得したいと思います。domainClass.propertiesこれは、(domainClassがGrailsDomainClassの場合)を使用して実行できます。

ただし、ユーザーがgrailsドメインクラスを持っているとします。

class Example {
  String name

    static constraints = {
    }

  def getSomeNonExistingProperty(){
    return "Not-a-real-property"
  }
}

この場合、との両方をdomainClass.properties含むリストを返しますnamesomeNoneExistingProperty

これは、Grailsが誰かがgetBlah()メソッドを持っている場合に使用するために、読み取り専用プロパティをオンザフライで生成しているためだと理解しています。これはすばらしいことですが、私のスクリプトでは、「実際の」プロパティのみ(または少なくとも非読み取り専用プロパティ)でいくつかのアクションを実行したいと思います。

つまりsomeNonExistingProperty、読み取り専用プロパティとして、または代わりに、Grailsによって生成され、プラグインのユーザーによってdomainClassのフィールドとして明示的に入力されていないプロパティとして区別または識別する方法が必要です。

GrailsDomainClassPropertyクラスを見てきましたが、プロパティに関する情報を提供するさまざまなメソッドがあります。ただし、プロパティが読み取り専用かどうか、またはdomainClassで定義されたフィールドと、「getSomeNonExistingProperty」の結果としてGrailsによってオンザフライで作成されたフィールドを区別できるようにするものはありません。 ()" 方法。

ここで明らかな何かが欠けていますか?明示的にユーザー定義されたフィールド(上記の例では名前など)のみのリストを取得する方法はありますか?

4

2 に答える 2

1

一時的なプロパティはあなたが除外しようとしているものだと思います

于 2010-10-22T01:30:26.090 に答える
0

私はこの問題に何度か遭遇しましたが、それを回避しようとする代わりに、通常はgetX()メソッドの名前を変更するだけです。それはおそらく最も簡単なオプションです。

編集: あるいは、リフレクションを使用してクラスで定義されているメソッドを確認し、プロパティを反復処理しながら、プロパティに明示的なゲッターが定義されているかどうかを確認し、それを省略できるかどうか疑問に思います。GroovyとGrailsに関しては、特に動的な方法については、リフレクションについてはあまり詳しくありませんが、調査の可能性のあるルートです。

于 2010-10-22T11:56:04.283 に答える