フォームに値を入力するためにSpringフォームタグを使用しています。
私はフォームバッキングオブジェクトを持っています:
public class FormInfo {
public enum Status {ON, OFF}
private Satus status;
//getter setter
...
}
そして、JSP Status
enum では次のように提示されます。
<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] に変換できません: 一致するエディターまたは変換戦略が見つかりません],