コード
${personRequest.constraints.requestStatus.inList}
私のgspファイルではNullPointerException
、がスローされますが、new PersonRequest().constraints..
機能します。なんで?constraints
スタティックじゃない?
ここからコピー(grails-user メーリング リスト)
しかし、静的フィールドへのアクセスが機能しないのはなぜですか?
「制約」静的フィールドはクロージャー プロパティであるためです。制約に関連するサブプロパティはありません。
Grails は、存在しないメソッド (つまり、使用するプロパティ名) への「呼び出し」を監視する制約ビルダーを使用して、このクロージャーを評価します。
type( inList: [xxxxx])
...「inList」==> 何らかの値を含む Map パラメーターを使用して、「type」へのメソッド呼び出しを引き起こします。
この情報から、Grails は利用可能なすべての制約のリストを作成し、
それらをドメイン クラスの将来のインスタンスにバインドします。したがって、User.constraints に静的にアクセスすると、
クロージャが取得されます。初期化されたクロージャーを評価した後、実行時に静的制約プロパティの値を置き換えることができます。ただし、これは少し「多すぎる」魔法かもしれません。人々はどう思いますか?
参考までに、0.4 (思い出すと) まで制約は静的ではなく、0.4 でも静的ではない可能性があるため、現在はこのようになっています。0.5 でのみ
、例外がスローされ、非静的制約が無視されます。