Grailsアプリケーションでは、サービスでメソッドを使用して、ユーザーが送信したデータの検証を複雑にしています。残念ながら、Grailsは静かに私を妨害しています。Grailsのカスタム検証エラーを消去する方法
- 私はユーザーとドメインインスタンスを移入は、私はプロパティを解析してサービスへのオフインスタンスを渡したデータ
- を提出しました。
エラーが見つかった場合、私は(検証サービスが変更されたプロパティおよびコールのためにバックコントローラGrailsのチェックのドメインインスタンスを通過する際に、背後
instance.errors.rejectValue('myValue','errors.customErrorCode','Error')
を使用してそれらを追加)のインスタンスを返す前。(ドメインインスタンスをサービスから1つ以上のプロパティが変更されたコントローラに返すときに呼び出されるbeforeValidateイベントを確認することで検証可能)
この動作によって、私が追加したカスタムエラーとインスタンスがクリアされます。コントローラが間違って間違ってエラーになりました。
にはどうすれ
A)は、サービスおよびコントローラ
OR
B)私のカスタムエラーを拭くから検証()の呼び出しを防ぐの間の検証からのGrailsを停止することができます。
EDIT は、これまでのところ私は、あなたがinstance.get(params.id)を使用している場合は、Grailsの自己カスタムエラーを拭く舞台裏で検証されます、
を1つの部分の答えを見つけました。
instance.read(params.id)を使用すると、この動作をある程度回避することができます。 docs
しかし、この解決策はドメインの関係によって制限されます。その他のソリューションは大歓迎です。
サービスにインスタンスを渡して、プロパティを分析します。 エラーが見つかった場合は追加します... 質問なぜサービスに渡してプロパティを分析し、サービスで拒否するのですか?これはコントローラに当たったときに検証ビーンですべて行います。ここを見てくださいhttp://stackoverflow.com/questions/37121551/how-to-properly-render-checkboxes-and-get-a-list- checkboxes-been-s-s#comment61789809_37121551コントローラ内で検証を行い、検証を行うif(bean.validate()){doSoemthing.inService(bean)} – Vahid
の代わりに、特にIOExceptionをスローするようにしてください。サービスのこのビットの間にDBの処理をしている場合 - 最終的には、コントローラでcatchを試みるのを苦労して回避してください。コントローラのサービスで行っているのと同じ妥当性検査の失敗と、それがどのような違いがあるかを確認してください。 – Vahid