[英]Setting a ModelAttribute's date field when receiving a String from an <input type="date"> in Spring MVC
我正在使用 Spring MVC,当该表单的 ModelAttribute 包含Date
字段时,提交表单时遇到问题。 当我进行 POST 时,我的 Apache Tomcat 日志会给我以下警告但没有堆栈跟踪:
WARN 2017-10-12 11:51:05,574 [http-nio-8080-exec-7] org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported
我的@PostMapping
controller 方法甚至从未被调用过。 问题是,当我将字段从Date
更改为String
时,POST 请求无需任何进一步更改即可通过。
我的表格 class:
public class MyForm {
private Date myDate;
// Other unrelated fields
// getters + setters
}
我的 JSP:
<form:form method="POST" action="/new/MyForm" modelAttribute="myForm">
// Unrelated inputs
<form:label path="myDate">Follow-up date</form:label>
<form:input path="myDate" type="date"/>
<input type="submit" name="complete" value="Submit"/>
</form:form>
我的Controller:
@InitBinder
public void dataBinding(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
CustomDateEditor dateEditor = new CustomDateEditor(dateFormat, true);
binder.registerCustomEditor(Date.class, dateEditor);
}
@PostMapping(value="new/MyForm", params="complete")
public ModelAndView submitMyForm(@ModelAttribute("myForm") MyForm form,
BindingResult result) {
if (result.hasErrors()) {
return new ModelAndView("myURL");
}
return this.saveAndRedirect(form);
}
如果我完全从 JSP 中取出日期输入,一切都会按预期进行并提交。 如果我将表单 class 中的Date
类型更改为String
,再次提交表单(但我需要在每个使用日期进行数据库存储的 controller 中每次手动将字符串转换为日期,反之亦然以显示检索日期)。
我究竟做错了什么?
尝试改变
<form:label path="myDate">Follow-up date</form:label>
<form:input path="myDate" type="date"/>
至
<form:label>Follow-up date</form:label>
<form:input path="myDate" type="date"/>
我们不应该将日期与标签绑定
请让我知道是否可行
public class MyForm{
@DateTimeFormat(iso=ISO.DATE)
private Date date;
}
在字段中声明@DateTimeFormat 指定字段必须格式化为日期或时间。所以基本上每次您尝试获取日期值时,它都会自动格式化为日期或时间。 关于您的 controller 在表单提交后请求未映射到 controller,我想这可能是您的请求处理程序路径。
尝试更改为:@PostMapping(value="/new/MyForm", params="complete")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.