我正在关注Spring Documentation 4.通过其指南,我成功收集了格式正确的Date字段。 控制器类是
@Controller
public class HomeController{
@RequestMapping("/home")
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return new ModelAndView("page1", "myForm", new MyForm());
}
}
MyForm类的字段日期使用 @DateTimeFormat
进行注释public class MyForm{
@NumberFormat(style = Style.CURRENCY)
private Double value = 50.00;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date date = new Date();
@NumberFormat(style = Style.CURRENCY)
public Double getValue() {
return value;
}
@DateTimeFormat(pattern = "dd/MM/yyyy")
public Date getDate() {
return date;
}
}
获取此myForm对象并评估日期字段的格式正确的JSP代码是
<spring:eval expression="myForm.date"/>
到目前为止,一切都正确。但是当我尝试在 Spring Controller 类
中使用日期字段时@Controller
public class HomeController {
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date date;
@RequestMapping("/home")
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
date = new Date();
return new ModelAndView("page1", "date", getDate());
}
@DateTimeFormat(pattern = "dd/MM/yyyy")
public Date getDate() {
return date;
}
}
获取此myForm对象并评估日期字段的格式错误的JSP代码是
<spring:eval expression="date"/>
它仍会显示日期,但不会对其进行格式化。请解释为什么它格式化MyForm类中的字段而不是Controller中的字段。
答案 0 :(得分:1)
POJO MyForm在提交表单时由Spring框架本身填充。 Spring接受请求参数,转换为正确的格式并填充空POJO的字段,但如果您手动调用由@DateTimeFormat
注释的方法,则它无法按预期工作。
您必须在控制器中使用java SimpleDateFormat
或joda DateTime
。