Java 绑定到LocalDate的Spring窗体控件默认为now

Java 绑定到LocalDate的Spring窗体控件默认为now,java,spring-mvc,binding,Java,Spring Mvc,Binding,我使用Spring表单为出生日期绑定了三个选择控件(日、月和年):选择org.joda.time.LocalDate 由于出生日期是可选的,我希望它的日期可以默认为空。但是,出生日期以今天的日期草签。即使我在模型中将出生日期设置为null,也会发生这种情况 这意味着在提交表单时,今天的日期将作为该字段的值发送,这不是我想要的。我不太关心日期如何存储在数据库中,只要null表示是清晰的(尽管null当然比0000-00-00:00:00更好) 我如何解决这个问题?我可以为LocalDate编写一个

我使用Spring表单为出生日期绑定了三个选择控件(日、月和年):选择org.joda.time.LocalDate

由于出生日期是可选的,我希望它的日期可以默认为空。但是,出生日期以今天的日期草签。即使我在模型中将出生日期设置为null,也会发生这种情况

这意味着在提交表单时,今天的日期将作为该字段的值发送,这不是我想要的。我不太关心日期如何存储在数据库中,只要null表示是清晰的(尽管null当然比0000-00-00:00:00更好)


我如何解决这个问题?我可以为LocalDate编写一个包装器,它的默认值为null,并且仅在表单绑定调用setter时初始化LocalDate。这似乎是一个相当普遍的问题,所以也许有更好的方法。

我已经找到了解决这个问题的部分方法,但我承认我不明白为什么它会起作用。将控件移动到JSP标记中有所帮助。这在第一页视图中不显示所选日期。如果用户输入日期并提交,则会在页面刷新中显示该日期

但是,在提交表单时,如果选择项为空,则会提交三个选择项使用日期选择器(绑定到今天的日期)链接到的隐藏输入值,这是不可取的。如果隐藏的输入没有被填充,这将是理想的,但是我认为用一个对象包装LocalDate,将日期字段初始化为null或空字符串是实现这一点的唯一方法。这是显示第一页加载时未选择日期的代码

<spring:bind path="${path}.dayOfMonth">
  <select>
       <option value="0"></option>
       <c:forEach items="${days}" var="day">
         <option value="${day}"<c:if test="${date.dayOfMonth eq day}"> selected="selected"</c:if>>${day}</option>
       </c:forEach>
  </select>
</spring:bind>
-- month and year dropdowns
<form:input path="${datepickerPath}" cssStyle="display:none;" />

${day}
--月份和年份下拉列表