在Spring MVC中接收来自< input type=“date”>的字符串时设置ModelAttribute的Date字段

e5nszbig  于 2022-10-04  发布在  Spring
关注(0)|答案(2)|浏览(140)

我使用的是Spring MVC,当一个表单的ModelAttribute包含Date字段时,我在提交该表单时遇到问题。当我发布帖子时,我的ApacheTomcat日志会给出以下警告,但没有堆栈跟踪:

WARN    2017-10-12 11:51:05,574 [http-nio-8080-exec-7] org.springframework.web.servlet.PageNotFound  - Request method 'POST' not supported

我的@PostMapping控制器方法甚至从未被调用过。问题是,当我将字段从Date更改为String时,POST请求将继续进行,而不会有任何进一步的更改。

我的Form类:

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>

我的控制器:

@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中取出日期输入,则所有内容都会按预期完成并提交。如果我在Form类中将Date类型更改为String,表单将再次提交(但我每次都需要在使用Date存储数据库的每个控制器中手动将字符串转换为日期,反之亦然,以显示检索到的日期)。

我做错了什么?

qvk1mo1f

qvk1mo1f1#

试着去改变

<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"/>

我们不应该把日期和标签捆绑在一起

如果管用,请让我知道

ffscu2ro

ffscu2ro2#

public class MyForm{
    @DateTimeFormat(iso=ISO.DATE)
    private Date date;

}

相关问题