Spring表单标签。允许表单中的空值:select(enum)

时间:2013-11-01 16:21:06

标签: spring jsp enums jstl

我正在使用Spring表单标签来填充带有值的表单。

我有表格支持对象:

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

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

在JSP Status中,枚举如下所示:

<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'中的字段错误   在字段'status'上:被拒绝的值[null];

     

...

     

[无法将'java.lang.String'类型的属性值转换为   属性'status'需要输入'com.my.project.model.Status';   嵌套异常是java.lang.IllegalStateException:无法转换   类型[java.lang.String]的值为必需的类型   [com.my.project.model.Status]属性'status':没有匹配   编辑或转换策略发现],

1 个答案:

答案 0 :(得分:3)

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

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

看看这个:

希望找到解决方案有所帮助!

问候

胜者。