由于 bindingresult 中的错误,在返回页面后格式化 jsp 中的日期视图

Formatting date view in jsp after returning a page because of errors in bindingresult

我有一个愚蠢的问题。我想在用户输入后更改表单中显示的日期格式。 我遇到这种情况: 用户使用日期选择器插入两个日期

然后,如果 bindingResult 有错误,返回相同的页面,但日期显示如下:

我只想像第一张图片中的日期一样显示第二张图片中的日期。谢谢!

编辑

这是包含日期的模型

@Entity
public class Booking implements Serializable {
//
private Date startDate;

private Date finishDate;
//

它们通过 Hibernate 存储在 table 在控制器中,由于从 mysql(我想)返回的日期,我必须为验证进行转换。我从 db 得到的格式是 "Sat Jul 01 00:00:00 CEST 2017",而我从 datepicker 得到的格式是 "yyyy-mm-dd HH:mm:ss".

@PostMapping("/rent")
    public ModelAndView vehicleRent(@RequestParam("id") long id, @ModelAttribute("newBooking") Booking booking, BindingResult bindingResult) throws ParseException {

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        String stringStartDate = dateFormat.format(booking.getStartDate());
        Date formattedStartDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(stringStartDate);

        if (booking.getStartDate() != null || booking.getFinishDate() != null || booking != null) {
            for (Booking b : vehicleBookings) {
                if (formattedStartDate.before(b.getFinishDate()) || formattedStartDate.equals(b.getFinishDate())) {
                    bindingResult.rejectValue("startDate", "validation.booking.startdate.exists");
                    break;
                }
            }
        }
//

jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
      integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
    $(function () {
        $("#startDate,#finishDate").datepicker();
    });
<form:form action="${pageContext.request.contextPath}/rent" method="POST" modelAttribute="newBooking">
    <div>
        <table class="table">

            <input id="id" name="id" type="hidden" value="${vehicle.id}"/>

            <tr>

                <td><form:label  path="startDate">Data Inizio</form:label></td>
                <td><form:input type="text" id="startDate" name="startDate" path="startDate" data-format="dd/MM/yyyy" /> </td>
                <td><form:errors path="startDate" cssStyle="color: #ff0000" /></td>
            </tr>
            <tr>
                <td><form:label  path="finishDate">Data Fine</form:label></td>
                <td><form:input type="text" id="finishDate" name="finishDate" path="finishDate" /></td>
                <td><form:errors path="finishDate" cssStyle="color: #ff0000" /></td>
            </tr>
        </table>

        <input  type="submit" value="Invia" /> 

        <br>
        <br>

        <a href="${pageContext.request.contextPath}/">Torna alla Home</a>

    </div>
</form:form>

您可以尝试将此注释添加到您的@DateTimeFormat

@Entity
public class Booking implements Serializable {

    @DateTimeFormat(pattern = "MM/dd/yyyy")
    private Date startDate;

    @DateTimeFormat(pattern = "MM/dd/yyyy")
    private Date finishDate;