在 Spring MVC 表单中填充日期字段

Populate date field in Spring MVC Form

我正在构建一个 Spring MVC (4.2.4.RELEASE) 应用程序,我 运行 遇到了一些日期字段问题。

我现在可以创建带有日期的对象,并且可以在文本中显示日期/'open' html。但是,我似乎无法填充 type=date 的输入框。谁能帮帮我?

所以我的 pojo 有 2 个日期字段

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date startDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date endDate;

我已经在控制器中添加了一个 InitBinder class

@InitBinder
protected void initBinder(WebDataBinder binder) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    dateFormat.setLenient(true);
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,false));

}

我将 pojo 作为 requestAttribute 传递给视图,我在这里没有看到任何问题,因为其他字段正在显示。

在jsp

<table>
    <tr>
        <td>Start Date</td>
        <td><form:input type="date" path="startDate" id="startDate" /></td>
    </tr>
    <tr>
        <td>End Date</td>
        <td><form:input  type="date" path="endDate" id="endDate" /></td>
    </tr>
</table>

字段未填充。我确定这是一个格式问题,就好像我通过删除 type="date" 将它们变成标准字符串输入框一样,文本框填充了日期(尽管不是我在任何地方指定的格式!?)。

例如2016 年 3 月 1 日星期二00:00:00格林威治标准时间

我是否需要 'force' 其他地方的格式?

我找到了答案,很抱歉回答了我自己的问题,也很抱歉没有把重要的代码放在问题中...我认为它可能对其他人有帮助...

问题是 Spring 似乎只在使用模型接口时使用 @DateTimeFormat 注释。我被要求尝试避免这种情况(我看不出有什么好的理由),所以尝试了其他选择,最终选择了 HttpServletRequest。 Spring 没有选择日期格式

    @RequestMapping(value = "/person/edit/{id}", method=RequestMethod.GET) 
    public String getPersonForEdit(@PathVariable("id") long id
            , HttpServletRequest request) throws IOException 
    {  
        ...     
        **request.setAttribute**("person", person);
        return "editPerson";
    }

控制器使用Model接口时

    @RequestMapping(value = "/person/edit/{id}", method=RequestMethod.GET) 
    public String getPersonForEdit(@PathVariable("id") long id
            , **Model model**) throws IOException 
    {  
         ...
         **model.addAttribute**("person", person);
         return "editPerson";
    }

日期格式工作正常。