5

私が探しているものは説明が非常に簡単です。イタリア語と英語の両方をサポートする必要があるフォームがあります。First Name 入力テキスト フィールドがあるとします。フォーム ラベルは次のようになります。

  • 英語の場合: 「名」
  • IT 向け: 「いいえ」

私が欲しいのは、これらのような検証エラーメッセージです

  • EN の場合: 「フィールドは必須です」
  • IT 向け: 「il campo Nome è richiesto」

エラーメッセージ内のフィールド名を引用していることに注意してください。

私はmessages_en.properties次の行を持っています:

errors.empty.field = the {0} field is required
registration.form.firstname = First Name

そしてもちろん、messages_it.properties次の行で:

errors.empty.field = il campo {0} è richiesto
registration.form.firstname = Nome

今、私が持っているカスタムバリデータークラスの中に

ValidationUtils.rejectIfEmpty(errors, "firstname", "errors.empty.field", new Object[]{"registration.form.firstname"}, "the First Name is required");

これは正しく機能しません。出力は「registration.form.username」の文字列そのままです。実行時にフィールド名に適切なロケールを挿入したいと思います。そうする方法はありますか?

4

1 に答える 1

2

これは 1 つのアプローチですが、もっと良い方法があるはずです。

messageSourceをコントローラーまたはバリデーターに挿入します。

@Autowired MessageSource messageSource

コントローラーの@RequestMappingメソッドで Locale をパラメーターとして受け取ると、Spring がそれを設定します。

@RequestMapping(...)
public String myMethod(..., Locale locale){
   ValidationUtils.rejectIfEmpty(errors, "firstname", "errors.empty.field", new Object[]{messageSource.getMessage("registration.form.firstname", new Object[]{}, locale)}, "the First Name is required");
....
}

アップデート:

LocaleContextHolderLocaleを使用して Validatorでハンドルを取得できます

于 2012-11-05T19:41:57.783 に答える