2016-05-11 11 views
0

Grailsアプリケーションでは、サービスでメソッドを使用して、ユーザーが送信したデータの検証を複雑にしています。残念ながら、Grailsは静かに私を妨害しています。Grailsのカスタム検証エラーを消去する方法

  1. 私はユーザーとドメインインスタンスを移入は、私はプロパティを解析してサービスへのオフインスタンスを渡したデータ
  2. を提出しました。
  3. エラーが見つかった場合、私は(検証サービスが変更されたプロパティおよびコールのためにバックコントローラGrailsのチェックのドメインインスタンスを通過する際に、背後

    instance.errors.rejectValue('myValue','errors.customErrorCode','Error') 
    
  4. を使用してそれらを追加)のインスタンスを返す前。(ドメインインスタンスをサービスから1つ以上のプロパティが変更されたコントローラに返すときに呼び出されるbeforeValidateイベントを確認することで検証可能)

  5. この動作によって、私が追加したカスタムエラーとインスタンスがクリアされます。コントローラが間違って間違ってエラーになりました。

にはどうすれ

A)は、サービスおよびコントローラ

OR

B)私のカスタムエラーを拭くから検証()の呼び出しを防ぐの間の検証からのGrailsを停止することができます。

EDIT は、これまでのところ私は、あなたがinstance.get(params.id)を使用している場合は、Grailsの自己カスタムエラーを拭く舞台裏で検証されます、

を1つの部分の答えを見つけました。

instance.read(params.id)を使用すると、この動作をある程度回避することができます。 docs

しかし、この解決策はドメインの関係によって制限されます。その他のソリューションは大歓迎です。

+0

サービスにインスタンスを渡して、プロパティを分析します。 エラーが見つかった場合は追加します... 質問なぜサービスに渡してプロパティを分析し、サービスで拒否するのですか?これはコントローラに当たったときに検証ビーンですべて行います。ここを見てください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

+0

の代わりに、特にIOExceptionをスローするようにしてください。サービスのこのビットの間にDBの処理をしている場合 - 最終的には、コントローラでcatchを試みるのを苦労して回避してください。コントローラのサービスで行っているのと同じ妥当性検査の失敗と、それがどのような違いがあるかを確認してください。 – Vahid

答えて

0

コードがどのように見えるか、問題の原因がわかりませんが、いずれの場合でも、ドメインクラスまたは制約内のコマンドオブジェクトにカスタムバリデーターを実装することを強く推奨します。ここで

は、Grailsのドキュメントからのいくつかの例は以下のとおりです。 http://docs.grails.org/2.4.0/ref/Constraints/validator.html

0

は、それがカスタム検証ではないようです。トランザクションサービスが原因である可能性があります。サービスはメソッドごとに個別のトランザクションを開き、メソッド終了後にエンティティをクリアします。これはdocsに記載されています(パートの最後の段落を読んでください)。したがって、エラーは検証のためではありません。

サービスがトランザクションかどうかわかりません。しかし、もしそうなら - あなたはエラーを緩めたくないという方針に@NotTransactional注釈を加えることができます。 のエラーが保存されます。

希望しました。 Matvei。

関連する問題