2

フォームに値を入力するためにSpringフォームタグを使用しています。

私はフォームバッキングオブジェクトを持っています:

public class FormInfo {
  public enum Status {ON, OFF}

  private Satus status;
  //getter setter
  ...
}

そして、JSP Statusenum では次のように提示されます。

<form:form commandObject="formInfo " ...>
     <form:select path="status">
        <form:option value="null" label="Please select"/>
        <form:options/>
     </form:select>
</form:form>

すべて正常に動作します。つまり、デフォルトのメッセージと列挙値が に表示され<select>ます。

ただし、ステータス フィールドは必須ではないため、ユーザーがステータス フィールドを選択しないままにしておくことを許可します。しかし、ステータス フィールドを選択せず​​にフォームを送信すると、エラーが発生します。

フィールド 'status' のオブジェクト 'formInfo' のエラー: 拒否された値 [null];

値が選択されていないときに enum を null に設定するにはどうすればよいですか?

JSR 303 検証を使用していることに注意してください。また、上記のエラーは自動的には発生しません。次のメソッドから手動でこのエラー メッセージを取得しますBindingResult#getFieldErrors()

これは私のコントローラコードです:

    public void myMethod(@Valid @ModelAttribute("formInfo") FormInfo sourcingDetail, BindingResult bindingResult) {
          if (bindingResult.hasErrors()) {
              log.error("Error during validation is occurred." + bindingResult.getFieldErrors().toString()); // <-- this is error message
          }
        ...
    }

また、フィールドに JSR-303 アノテーション (@NotNull など) を設定していないことに注意してくださいstatus

アップデート:

このメソッドを呼び出すと、ほぼ完全なエラー メッセージが表示されますBindingResult#getFieldErrors()(上記で説明)。

検証中にエラーが発生しました。[フィールド 'status' のオブジェクト 'formInfo' のフィールド エラー: 拒否された値 [null];

...

[タイプ 'java.lang.String' のプロパティ値をプロパティ 'status' の必要なタイプ 'com.my.project.model.Status' に変換できませんでした; ネストされた例外は java.lang.IllegalStateException: タイプ [java.lang.String] の値をプロパティ 'status' の必要なタイプ [com.my.project.model.Status] に変換できません: 一致するエディターまたは変換戦略が見つかりません],

4

1 に答える 1

3

i! と同じ問題を抱えているようです。

コントローラには、HTTP リクエストから取得した文字列値を具体的なオブジェクトに変換する方法を指定できるフックとして機能するメソッドがあります。このメソッドは initBinder と呼ばれ、変換を適切に行うための適切な動作をそこにアタッチします。まだ調査中ですが、今のところ良さそうです。

これを見てください :

解決策を見つけるのに役立つことを願っています!

ご挨拶

ビクター。

于 2014-03-13T22:03:40.800 に答える