1

2.5では新しいGWT検証ライブラリを使用しています。

違反の集計リストを画面に追加しています。このリストには、ローカライズされたフィールド名を表示する必要があります。

@MyNotNull(foo= "Stage")
public String getStage();

ローカライズされたメッセージを表示する必要があります

「ステージは必須フィールドです」

MyValidationMessages.propertiesのメッセージは次のとおりです。

{foo}は必須フィールドです

注釈では、定数以外の値を属性に割り当てることはできないことに注意してください。したがって、設計時に何らかの方法でロケール値を取得する必要があります:/

これは機能しません

@MyNotNull(foo = injector.getLocale().errorMessage()) 
public String errorMessage()

プロパティには定数が必要なため、localeKeyを使用してロケールファイルでロケールを検索するにはどうすればよいですか?

4

1 に答える 1

0

解決策は

  • FieldLocale.properties のようなものを追加します。これは定数ルックアップです
  • localeKey のような属性を注釈に追加します
  • ConstraintViolation コレクションを繰り返す
  • 以下のようなものを使用して、属性値を取得します
  • FieldLocale.properties ファイルでローカライズされた値を検索します
  • 違反をコピーし、メッセージをローカライズ版に変更します

    保護された文字列 getAttributeValue(ConstraintViolation 違反、文字列キー) { ConstraintDescriptor 記述子 = 違反.getConstraintDescriptor();

        if (descriptor.getAttributes().containsKey(key))
            return (String) descriptor.getAttributes().get(key);
    
        return null;
    }
    
    protected ConstraintViolation<T> copyMessage(ConstraintViolation<T> violation, String message) {
        return ConstraintViolationImpl.<T> builder() //
                .setConstraintDescriptor(violation.getConstraintDescriptor()) //
                .setInvalidValue(violation.getInvalidValue()) //
                .setLeafBean(violation.getLeafBean()) //
                .setMessage(message) //
                .setMessageTemplate(violation.getMessageTemplate()) //
                .setPropertyPath(violation.getPropertyPath()) //
                .setRootBean(violation.getRootBean()) //
                .setRootBeanClass(violation.getRootBeanClass()) //
                .build();
    }
    
于 2013-02-08T19:51:20.600 に答える