Grails 2.3.4生成された足場検証
-
20-12-2019 - |
質問
私はGrails 2.3.4が生成された足場方法を検証を実行する方法を理解しようとしています。たとえば、これは私のクラブドメインの保存方法に対して生成されたものです:
def save(Club clubInstance) {
if (clubInstance == null) {
notFound()
return
}
if (clubInstance.hasErrors()) {
respond clubInstance.errors, view:'create'
return
}
clubInstance.save flush:true
request.withFormat {
form {
flash.message = message(code: 'default.created.message', args: [message(code: 'clubInstance.label', default: 'Club'), clubInstance.id])
redirect clubInstance
}
'*' { respond clubInstance, [status: CREATED] }
}
}
.
検証の最初の段階を理解していることから、保存処置のClub ClubInstanceパラメータへのデータバインディングに起こりました。そのため、IF(clubinstance.haserrors())に巻き込まれます。
ClubInstance.validate()またはClubInstanceのエラーチェックの明示的な呼び出しはありません。しかし、それはうまくいくようです。では、このメソッドはどのようにして検証して、制約違反がある場合はビューに戻りますか?
生成された足場コントローラーを使用することはできません。
解決
コントローラのアクションメソッドにパラメータを含めると、Grailsはそれらのためにデータバインディングを行います。文字列、数字、ブール値などのシンプルなタイプの場合、パラメータ名はパラメモの名前と一致し、パラメータ文字列を要求されたタイプに変換するための一致と賢明な方法がある場合は、それはあなたのために行われます。
複合型の場合、パラメータはコマンドオブジェクトとして扱われます。コントローラクラスに定義されている場合は、AST変換を介してコンパイル時に検証可能になります。クラスが他の場所に定義されている場合(例えば、SRC / Groovy)、それはgrails.validation.Validateable
注釈で注釈を付ける必要があり、それがドメインクラスである場合はそれは明らかに検証可能です。いずれにせよ、インスタンスが作成されてデータバインドされた後、Validate()が呼び出されます。