Spring表单标签。允许表单中的空值:选择(枚举)

Spring表单标签。允许表单中的空值:选择(枚举),spring,jsp,enums,jstl,Spring,Jsp,Enums,Jstl,我使用Spring表单标签来填充表单中的值 我有表格支持对象: public class FormInfo { public enum Status {ON, OFF} private Satus status; //getter setter ... } 在JSP状态中,枚举如下所示: <form:form commandObject="formInfo " ...> <form:select path="status">

我使用Spring表单标签来填充表单中的值

我有表格支持对象:

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

  private Satus status;
  //getter setter
  ...
}
在JSP状态中,枚举如下所示:

<form:form commandObject="formInfo " ...>
     <form:select path="status">
        <form:option value="null" label="Please select"/>
        <form:options/>
     </form:select>
</form:form>
另外请注意,我没有在状态字段上设置任何JSR-303注释,比如@NotNull

更新:

调用此方法得到的几乎完整的错误消息BindingResultgetFieldErrors如上所述:

验证期间出错。[对象“formInfo”中的字段错误 在字段“状态”上:被拒绝的值[null]

[未能将“java.lang.String”类型的属性值转换为 属性“Status”的必需类型“com.my.project.model.Status”; 嵌套异常为java.lang.IllegalStateException:无法转换 将[java.lang.String]类型的值转换为所需类型 属性“Status”的[com.my.project.model.Status]:不匹配 找到编辑器或转换策略]


看来你和我有同样的问题

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

看看这个:

希望这有助于找到解决方案

问候


Victor.

这是完整错误吗?看起来不像是Bean验证错误。你有stacktrace吗?@Hardy我更新了问题,在控制器方法中添加了完整错误消息和附加代码。请查看。谢谢。看起来这是一个转换错误。前端给你一个字符串作为状态,但你需要一个emum类型。尽可能我不能告诉任何与Bean验证相关的东西。我不确定JSF如何以及是否可以为您进行转换。我还发现enum的默认绑定器将转换为null,至少对于Spring 2.5是这样!
    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
          }
        ...
    }