首页 > 解决方案 > 使用 Kendo api 日期选择器传递 LocalDateTime 数据的问题

问题描述

我正在使用 jsp 绑定形式的剑道日期选择器(使用 spring + hibernate)。表格如下所示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <link href="/Kstyles/kendo.common.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="/Kstyles/kendo.common.min.css" />
    <link rel="stylesheet" href="/Kstyles/kendo.default.min.css" />
    <script src="/Kjs/jquery.min.js"></script>
    <script src="/Kjs/kendo.all.min.js"></script>
    <title>Appointment</title>
</head>
<body>
<form:form modelAttribute="visit" method="POST" >
    ${spec}:<form:select path="doctor" multiple="false">
    <c:forEach var="doctor" items="${doctors}">
        <form:option value="${doctor}" label="${doctor.surname}"/>
    </c:forEach>
</form:select>

    Date and time:<form:input id="timePicker" path="date"   />
    Cause: <form:select path="cause" multiple="false">
    <c:forEach var="cause" items="${causes}">
        <form:option value="${cause}" label="${cause.description}"/>
    </c:forEach>
</form:select>
    <input type="submit" value="Submit"/>
</form:form>


<script>
    (function($) {
        var dateTimePicker = kendo.ui.DateTimePicker;

        var MyWidget = dateTimePicker.extend({

            init: function(element, options) {
                dateTimePicker.fn.init.call(this, element, options);
            },
            startTime: function(startTime) {
                var timeViewOptions = this.timeView.options;
                timeViewOptions.min = startTime;
                this.timeView.setOptions(timeViewOptions);
            },
            endTime: function(endTime) {
                var timeViewOptions = this.timeView.options;
                timeViewOptions.max = endTime;
                this.timeView.setOptions(timeViewOptions);
            },
            options: {
                name: "CustomDateTimePicker",
                interval: 20,

            }
        });

        kendo.ui.plugin(MyWidget);

    })(jQuery);
    var datePicker = $("#timePicker").kendoCustomDateTimePicker().data("kendoCustomDateTimePicker");
    datePicker.startTime("07:00");
    datePicker.endTime("20:00");
</script>

</body>
</html>

此表单应创建一个名为 DoctorVisit 的新实体并将其保存到 DB,以下是该实体的代码:

@Entity
@Table(name = "visits", uniqueConstraints = {@UniqueConstraint(columnNames = {"date", "doctor_id"})})
public class DoctorVisit {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Enumerated(EnumType.STRING)
    private Cause cause;
    @DateTimeFormat(pattern="MM.dd.yyyy hh:mm ")
    private LocalDateTime date;
    @Enumerated(EnumType.STRING)
    private Status status;
    private String diagnosis;
    private String prescription;
    private  String referalls;
    @ManyToOne
    private Patient patient;
    @ManyToOne
    private Doctor doctor;
    private int durationMinutes;
    @OneToOne
    DoctorsOffice doctors_office;
    //and all getters and setters

当我尝试添加新访问时,收到此消息:

字段 'date' 上的对象 'doctorVisit' 中的字段错误:拒绝值 [9/25/2018 8:00 AM]

并且:

无法将类型“java.lang.String”的属性值转换为属性“日期”所需的类型“java.time.LocalDateTime”

表单传递的格式与本地日期格式不兼容,我的问题是如何解决?

标签: javajqueryhibernatekendo-ui

解决方案


推荐阅读