13

モデル....

@Digits(integer=5, fraction=0, message="The value must be numeric and less than five digits")
private int value;

ビーンズファイル....

<mvc:annotation-driven />

コントローラ....

@RequestMapping(value = "/admin/save.htm", method = { RequestMethod.POST })
public ModelAndView saveSection(@Valid @ModelAttribute Section section, BindingResult result) {
     if(result.hasErrors())   {
         return new ModelAndView("admin/editSection", "section", section);
     }

「値」を数値のみに制限するにはどうすればよいですか? 数字以外を入力すると、次のエラーが発生します。

タイプ java.lang.String のプロパティ値を、プロパティ値に必要なタイプ java.lang.Integer に変換できませんでした。ネストされた例外は org.springframework.core.convert.ConversionFailedException: 値 "A" を java.lang.String 型から java.lang.Integer 型に変換できません。ネストされた例外は java.lang.IllegalArgumentException: Unable to parse A です

いくつかの投稿でinitBindingについて言及しているのを見ましたが、それを使用する方法や、それが私を助けるかどうかさえわかりません. これは以前に解決されている必要があります。バインドされる前に数値であることを確認する方法はありますか?

または、誰かが正しい messages.properties エントリを投稿してこのエラーをオーバーライドできれば、それは私にとってもうまくいく可能性があります。

@Pattern を試しましたが、int では機能しません

4

1 に答える 1

25

おっしゃるとおり、 にはユーザーフレンドリーなメッセージが必要ですmessages.properties。次のメッセージ コードのいずれかを使用できます (さまざまなレベルの選択性があります)。

  • typeMismatch.section.value
  • typeMismatch.value
  • typeMismatch.int
  • typeMismatch

また、メッセージ コードがわからない場合は、単純に出力することができます。これにより、バインド エラーの完全な説明が返されますBindingResulttoString()

于 2010-11-03T00:10:32.637 に答える