提交Spring表单时日期格式错误

我有一个使用Spring MVC和Thymeleaf的项目。我需要根据每个用户的偏好以不同的格式显示日期。例如,用户A要显示日期,例如MM / dd /

yyyy,而用户B要显示日期,例如dd / MM / yyyy。

为此,我使用以下百里香参数:

th:value="${#dates.format(myDate, dateFormat)}"

值“ dateFormat”基于用户首选项。这很好。

我的问题是日期输入是在表单中,而当我提交表单时,它的格式不正确。我总是得到MM / dd / yyyy。

如果我选择格式dd / MM / yyyy并输入18/01/2016,则在我的弹簧控制器中,我获得“ Thu Jun 01 00:00:00 CEST

2017”,对应于dd / MM / yyyy中的01/06/2017。 。

如何使用所需的格式显示日期?

这是我的代码:

<form th:action="@{/test}" th:object="${filter}" th:method="POST">

<input type="date" th:type="date" class="form-control" th:id="myDate"

th:name="myDate" th:value="${#dates.format(filter.myDate, dateFormat)}"/>

</form>

控制器:

@RequestMapping(value = "/test", method = RequestMethod.POST)

public String myTest(@ModelAttribute Filter filter, Model model) {

Systeme.out.println(model.dateFormat);

// dd/MM/yyyy

Systeme.out.println(filter.myDate.toString());

// Thu Jun 01 00:00:00 CEST 2017

return "test";

}

回答:

经过一天的研究,我发现Spring读取了Web请求中发送的值,并尝试将其与Filter对象绑定。

对于日期值,除了找到格式为“ MM / dd / yyyy”的值外。如果您以其他格式发送值,则该值不起作用。

要解决此问题,可以使用注释“ InitBinder”。

@InitBinder

private void dateBinder(WebDataBinder binder) {

//The date format to parse or output your dates

SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormat());

//Create a new CustomDateEditor

CustomDateEditor editor = new CustomDateEditor(dateFormat, true);

//Register it as custom editor for the Date type

binder.registerCustomEditor(Date.class, editor);

}

针对每个Web请求执行此方法。在这里,我调用“

dateFormat()”方法来获取用户首选项中的格式,并告诉Spring它在Web请求中找到的所有java.util.Date都具有这种格式。

这是我的完整代码:

筛选器:

import java.util.Date;

@lombok.Data

public class TestDateFilter {

private Date myDate;

public TestDateFilter() {

this.myDate = new Date();

}

}

控制器:

@RequestMapping(value = "/testdate")

public String testDate(Model model) {

model.addAttribute("filter", new TestDateFilter());

return "testdate";

}

@RequestMapping(value = "/testdate", method = RequestMethod.POST)

public String testDatePost(@ModelAttribute("filter") TestDateFilter filter, Model model) {

System.out.printf(filter.getLoadingStartDate().toString());

System.out.printf(dateFormat());

return "testdate";

}

@ModelAttribute("dateFormat")

public String dateFormat() {

return userPreferenceService.getDateFormat();

}

@InitBinder

private void dateBinder(WebDataBinder binder) {

//The date format to parse or output your dates

SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormat());

//Create a new CustomDateEditor

CustomDateEditor editor = new CustomDateEditor(dateFormat, true);

//Register it as custom editor for the Date type

binder.registerCustomEditor(Date.class, editor);

}

HTML:

    <form th:action="@{/testdate}" th:object="${filter}" th:method="POST">

<div class="row">

<div class="col-xs-12 col-sm-6">

<div class="input-group date">

<input type="date" th:type="date" class="form-control"

th:id="loadingStartDate" th:name="loadingStartDate"

th:value="${#dates.format(filter.loadingStartDate, dateFormat)}" />

</div>

</div>

</div>

<div class="row">

<div class="form-group">

<div class="col-xs-12 col-sm-12">

<button type="submit" class="btn btn-primary btn-lg pull-right">

submit

</button>

</div>

</div>

</div>

</form>

以上是 提交Spring表单时日期格式错误 的全部内容, 来源链接: utcz.com/qa/399791.html

回到顶部