Spring MVC:将3个下拉列表绑定到SimpleFormController中的date属性

时间:2020-03-06 15:00:59  来源:igfitidea点击:

我应该如何配置该类以将三个下拉列表(日期,月份,年份)绑定到单个Date属性,以便它按"针对每个属性的单个请求参数"方案的方式工作?
我猜应该通过重写initBinder方法来添加一些自定义PropertyEditor。还有什么 ?

解决方案

我们可以在表单中创建一个隐藏的输入,并在用户选择日期时使用JavaScript填充它,然后将其绑定到命令对象中。

无论如何,我们可能仍将使用javascript来进行诸如检查日期的正确性之类的事情,所以为什么不将可用日期设置为一个参数。

然后,我们需要注册一个属性编辑器,该编辑器将从字符串" 2008-05-20"转换为Date对象。

那么我将在命令对象的年,月,日中包含三个字段,并将使用标准的Spring验证进行日期检查

Aleksey Kudryavtsev:我们可以在控制器中覆盖onBind方法,但不能在命令对象中摆弄一些特殊的东西,例如

dateField = new SimpleFormat("YYYY-mm-dd").parse(this.year + "-" + this.month + "-" this.day);

或者:

Calendar c = Calendar.getInstance();
c.set(year, month, day);
dateField = calendar.getTime();

但是我宁愿在javascript中进行验证并使用一些可用的日期选择器组件,其中有很多...