2012-01-04 7 views
0

私たちのアプリケーションに登録されているカスタムタイプコンバータは、Fooとの変換を担当するFooTypeConverterと言います。他のタイプの型変換エラーには関心がありませんが、ターゲットタイプFooのタイプ変換が失敗した場合、検証エラーを発生させたいと考えています。私たちは、String =>FooFoo =>String特定のタイプのStruts2型変換エラーのみ

の両方に興味がある私は、これはConversionErrorFieldValidatorで達成することができます知っているが、これはターゲット・フィールドを飾る意味します。いくつかのグローバルセットアップでこれを達成できる方法はありますか?

おかげで、よろしく、 アサ

+0

フィールドごとにチェックすることもできます。http://struts.apache.org/2.3.1/docs/type-conversion.html#TypeConversion-TypeConversionErrorHandling –

+0

@UmeshAwasthi、これは私が避けたいものです可能。変換エラーフィールドバリデーターは、フィールドごとに設定する必要があります。私がしたいのは、何らかの種類のグローバルセットアップがあるため、ターゲットタイプFOOのすべての変換エラーが発生します。 – Asa

+0

このケースでは、Struts2がエラー処理メカニズムをジェネリックとして開発したようなものを提供してくれるのではないかと心配しています。カスタムインターセプターの何らかの仕組みで対応する必要があるかもしれません。そうでない場合、またはケースごとに –

答えて

2

一言で言えば:デフォルト"conversionError"インターセプタを交換し、Fooある値の型場合に限っtrueを返すshouldAddErrorを上書きしたバージョンに置き換えます。

詳細:デフォルトのインターセプタは、ほとんど値をチェックするXWorkのConversionErrorInterceptorの拡張です。また、特定のタイプをチェックするので、これが最もきれいなフックだと思います。 shouldAddErrorをオーバーライドし、値の種類は、あなたが興味を持っている1のときに限りtrueを返す

に大雑把:。

protected boolean shouldAddError(String propertyName, Object value) { 
    return value instanceOf Foo; 
} 

あなたは値チェックの一部なので、ダブルチェックを維持することを望むかもしれません。最初にsuper.shouldAddErrorに電話するのが最も簡単な場合があり、trueを返すかどうか確認してください。

+0

答えDaveに感謝します。これはFoo =>文字列変換エラーをキャッチしますが、String => Fooはどうでしょうか? (申し訳ありませんが、私の質問は十分ではないかもしれませんが、私はそれを更新します) – Asa

+0

@Asa確かに、私は実際に何が起こるかを見るために少し遊ばなければならないでしょう。いずれにしても、AFAICTは名前やタイプに基づいて唯一の本当の解決策であるか、特に興味のあるエラーを特定するために追加情報を追加する必要があります。 –

+0

私はこれをとった私は新しいカスタムインターセプタでエラーを発生させるかどうかを判断するために使用した 'FooTypeConverter'からコンテキストに余分な情報を追加しました。プロパティー名は型変換器で利用できなかったので、私はキー 'XWorkConverter.CONVERSION_PROPERTY_FULLNAME'を使用して、コンテキストから同じ名前を保持しました。 Daveの助けをありがとう。 – Asa

関連する問題