1

コード

${personRequest.constraints.requestStatus.inList}

私のgspファイルではNullPointerException、がスローされますが、new PersonRequest().constraints..機能します。なんで?constraintsスタティックじゃない?

4

1 に答える 1

3

ここからコピー(grails-user メーリング リスト)

しかし、静的フィールドへのアクセスが機能しないのはなぜですか?

「制約」静的フィールドはクロージャー プロパティであるためです。制約に関連するサブプロパティはありません。

Grails は、存在しないメソッド (つまり、使用するプロパティ名) への「呼び出し」を監視する制約ビルダーを使用して、このクロージャーを評価します。

type( inList: [xxxxx])

...「inList」==> 何らかの値を含む Map パラメーターを使用して、「type」へのメソッド呼び出しを引き起こします。

この情報から、Grails は利用可能なすべての制約のリストを作成し、
それらをドメイン クラスの将来のインスタンスにバインドします。

したがって、User.constraints に静的にアクセスすると、
クロージャが取得されます。

初期化されたクロージャーを評価した後、実行時に静的制約プロパティの値を置き換えることができます。ただし、これは少し「多すぎる」魔法かもしれません。人々はどう思いますか?

参考までに、0.4 (思い出すと) まで制約は静的ではなく、0.4 でも静的ではない可能性があるため、現在はこのようになっています。0.5 でのみ
、例外がスローされ、非静的制約が無視されます。

于 2008-10-18T11:20:58.790 に答える