我有一个表单字段应该转换为Date对象,如下所示:
<form:input path="date" />
我要求以下列方式进行验证:
如果用户将此字段留空。我需要设置一些默认日期。
如果用户以不可接受的格式投入,我需要提出错误。
问题在于我可以满足第一或第二要求。
这个问题有什么好办法吗?
答案 0 :(得分:3)
如果您要从Spring MVC验证器转移到Hibernate,有一种方法可以做到这一点。这不是什么大问题,因为Hibernate验证器可以很好地与Spring Validator接口配合使用(您也可能对支持组的SmartValidator intreface感兴趣)。
之后你可以指定
@NotNull
日期字段上的注释。
在属性文件中添加
NotNull.[formName].[dateField]
=如果没有发送日期,将显示此消息
typeMismatch.[formName].[dateField]
=如果spring无法将输入转换为日期对象,则会显示此消息(格式验证错误)
对于格式检查,您可以使用CustomDateEditor
。
使用此解决方案,您将在每种情况下获得预期的验证错误消息。
答案 1 :(得分:1)
当我不得不面对这样的问题时,我会颠倒逻辑。我没有为空字段设置默认值,但是我在操作的渲染部分中使用默认值预加载字段。所以我可以安全地使用@DateTimeFormat(pattern="dd-MMM-yyyy")
有效,因为空字段假设用户专有地删除了默认值,这是一个错误。
所以恕我直言,您应该在控制器的GET部分为该表单设置默认值,并坚持使用简单的@DateTimeFormat(pattern="dd-MMM-yyyy")
注释。
我有一个使用包含日期字段的@ModelAttribute
带注释对象的应用程序。
在对象类中,日期字段在getter和setter上使用DateTimeFormat(pattern="dd/MM/yyyy")
进行注释。 Spring(3.2.4)接受日期字段的空值,只将其设置为null。因此,您应该使用@DateTimeFormat(pattern="dd-MMM-yyyy")
并仍然可以接受空值。