2

我有三个选择控件(日、月和年),用于使用 Spring 表单绑定的出生日期:选择到 org.joda.time.LocalDate。

由于出生日期是可选的,我希望日期可以默认为空。然而,出生日期是用今天的日期初始化的。即使我在模型中将出生日期设置为 null,也会发生这种情况。

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

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

4

1 回答 1

1

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

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

<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;" />
于 2013-07-02T07:37:11.260 回答