この質問は私の別の質問の問題から来ています。その質問では、パート7.5の指示に従ってすべてのことを行った後でも、非永続ドメインクラスhasErrors()
では関数が機能しないという状況に遭遇します。
ビクターのやり方に従って、validate()を呼び出して問題を修正しましたが、なぜそれが機能するのかわかりません。Grailsドキュメントには、hasErrors()関数の前にvalidate()を呼び出す必要があることについては何も書かれていないようです。これはどのように起こりますか?
この質問は私の別の質問の問題から来ています。その質問では、パート7.5の指示に従ってすべてのことを行った後でも、非永続ドメインクラスhasErrors()
では関数が機能しないという状況に遭遇します。
ビクターのやり方に従って、validate()を呼び出して問題を修正しましたが、なぜそれが機能するのかわかりません。Grailsドキュメントには、hasErrors()関数の前にvalidate()を呼び出す必要があることについては何も書かれていないようです。これはどのように起こりますか?
validate
オブジェクトにそれを尋ねる前に呼び出す必要があることは私には理にかなっていますhasErrors
(またはsave
、内部で呼び出す適切なドメインオブジェクトの場合validate
)。このコンテキストで検証するということは、「このオブジェクトが有効かどうかを確認し、有効でない場合はエラーを示す」ことを意味します。
あるいは、GORM実装はvalidate
、オブジェクトに変更が加えられるたびに呼び出す必要があります。これは、多くの作業が頻繁かつ不必要に行われる可能性があるため、私にとってはあまり望ましくない動作です(これらの制約の一部には多くの作業が含まれる可能性があります) )。
セクション7.2の冒頭には、「ドメインクラスを検証するには、任意のインスタンスでvalidateメソッドを呼び出すことができます」と明確に記載されています。また、「Grails内には基本的に2つの検証フェーズがあり、最初のフェーズはデータバインディングです。これは、リクエストパラメータを次のようなインスタンスにバインドするときに発生します。この時点で、次の理由により、errorsプロパティにすでにエラーが発生している可能性があります。型変換(文字列から日付への変換など)。これらを確認し、Errors APIを使用して元の入力値を取得できます。...検証の第2フェーズは、validateまたはsaveを呼び出すときに発生します。これは、Grailsが境界を検証するときです。値は、定義した制約に反します。」
のドキュメントにhasErrors
もこれが記載されています。ドキュメントサイトにいるときに、左側のナビゲーションフレームでメソッド呼び出しを見つけることで、これにアクセスできます。多くの場合、もう少し詳細が記載されているので、これらのページと、より説明的なユーザーガイドページを確認することを常にお勧めします。
こちらもvalidate
メソッドのページです。
直接電話をかけるのに問題があったことは一度もありません。それは私にはvalidate
非常に明白であり、すべての作業が完了し、検証を行う準備ができているポイントを選択できます。この動作を変更するオプションはどこにもありませんが、validate
自動的にまたは特定の条件下で呼び出されるようにしたい場合invokeMethod
は、クラスに追加してvalidate
特定の呼び出しを渡す前に呼び出すことで、Groovyメタプログラミングの魔法を使用できます。 。こことここを見てください。(ただし、それをお勧めするかどうかはわかりません!また、GORM検証フレームワーク内での使用に依存するようになることを覚えておいてくださいvalidate
。そうしないと、そのメソッドが存在しない可能性があります)。