繁体   English   中英

从<input type="date">在 Spring MVC

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM