我正在使用 Spring 表单标签来填充表单的值。
我有表单支持对象:
public class FormInfo {
public enum Status {ON, OFF}
private Satus status;
//getter setter
...
}
在 JSPStatus
枚举中呈现如下:
<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];
未选择任何值时,如何将枚举设置为 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
}
...
}
另请注意,我没有在status
字段上设置任何 JSR-303 注释(如 @NotNull)。
更新:
我从调用此方法中得到的几乎完整的错误消息BindingResult#getFieldErrors()
(如上所述):
验证期间发生错误。[字段“状态”上的对象“formInfo”中的字段错误:拒绝值[null];
...
[无法将类型“java.lang.String”的属性值转换为属性“status”所需的类型“com.my.project.model.Status”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.lang.String] 的值转换为属性“状态”所需的类型 [com.my.project.model.Status]:找不到匹配的编辑器或转换策略],