2

我正在使用 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]:找不到匹配的编辑器或转换策略],

4

1 回答 1

3

看起来你和我有同样的问题!。

控制器中有一个方法用作挂钩,您可以在其中指定如何将来自 HTTP 请求的字符串值转换为具体对象!该方法称为 initBinder,您可以在其中附加正确的行为以正确进行转换。我还在研究,但到目前为止,看起来不错。

看看这个 :

希望它有助于找到解决方案!

问候

胜利者。

于 2014-03-13T22:03:40.800 回答