3

私のstruts2アプリケーションには、整数を受け入れるcarrierNoという名前のフィールドがあります。文字列を入れると、次の検証エラーメッセージが表示されます。

    *Invalid field value for field "carrierNo".*

プロパティファイルでこのエラーメッセージを次のようにカスタマイズできます

    invalid.fieldvalue.carrierNo=this field does not accept characters

しかし、Web アプリケーションの文字列以外のフィールドごとにカスタマイズされたメッセージを書きたくないので、一般的なものにしたいので、次のことを試しましたが、うまくいきませんでした

  invalid.fieldvalue.%{getText(fieldName)}=this field does not accept characters

一般化する方法がない場合は、このメッセージを無効にするのを手伝ってください。次に、プロパティ ファイルで定義した単一のメッセージで変換フィールド バリデータを使用します。

だから私の要求は、これを無効にするのを助けることです.fieldvalue.carrierNo一般的なものをこのフォームinvalid.fieldvalue.%{getText(fieldName)}

または、このエラー メッセージの表示を無効にします。フィールド "carrierNo" のフィールド値が無効です。

4

2 に答える 2

4

ConversionErrorInterceptor失敗したフィールドのクラスを見つけてカスタムメッセージを取得する独自の実装を作成できます。

編集:
のソースコードを参照してくださいConversionErrorInterceptor。たとえば、interceptメソッド内のカスタムインターセプターでこのようなことを行うことができます

// get field by name from action
Field f = invocation.getAction().getClass().getDeclaredField(propertyName);
// get type of field
Class clz = f.getType();

String message = LocalizedTextUtil.findDefaultText(XWorkMessages.DEFAULT_INVALID_FIELDVALUE + "." + clz,
                    invocationContext.getLocale());

そして、messages.propertiesファイルに、などを入れてxwork.default.invalid.fieldvalue.intくださいxwork.default.invalid.fieldvalue.float

于 2012-10-02T11:07:54.690 に答える
0

変換メッセージを削除する最も簡単な方法は、デフォルトスタックから「conversionError」インターセプターを削除することです。ただし、それを削除する際の問題の 1 つは、失敗した変換の値に置き換えるのではなく、元の (変換されていない) 値をフィールドに戻す役割も IIRC が負うことです。これは、不快なユーザー エクスペリエンス、IMO につながる可能性があります。

「... は文字を受け入れません」という変換エラー メッセージを作成するのは適切ではありません。変換エラーはアプリケーション全体に影響し、文字が変換エラーの原因ではない場合もあります。

于 2012-09-10T12:02:30.457 に答える