在 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";
}
日期格式工作正常。
我正在构建一个 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";
}
日期格式工作正常。