如何使用Java8API(LocalDateTime)将LocalDateTime从jsp传递给控制器?

如何使用Java8API(LocalDateTime)将LocalDateTime从jsp传递给控制器?,java,spring,jsp,controller,java-8,Java,Spring,Jsp,Controller,Java 8,我需要你的帮助。因为我的JSP中有form:form,而form:form的内部是form:input和date。。详情如下: <form:form modelAttribute="personalTask" method="POST" action="${pageContext.request.contextPath}/taskmgr/add"> (...) <div class="input-group">

我需要你的帮助。因为我的JSP中有form:form,而form:form的内部是form:input和date。。详情如下:

    <form:form modelAttribute="personalTask" method="POST" action="${pageContext.request.contextPath}/taskmgr/add">
    (...)
            <div class="input-group">
                    <form:input path="startDate" type="date" id="startDateTimePicker" name="search_message[displayDateFrom]" placeholder="YYYY-MM-DD hh:mm:ss" class="input-sm form-control"></form:input>
                    <div class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"> </span>
                    </div>
            </div>  
    (...)
    </form:form>
PersonalTask看起来像:

    public class PersonalTask{
    (...)
            @Column(name = "START_DATE", columnDefinition="TIMESTAMP", nullable = false)
            private LocalDateTime startDate;
    (...)
            public LocalDateTime getStartDate() {
                    return startDate;
            }
            public void setStartDate(LocalDateTime startDate) {
                    this.startDate = startDate;
            }
    (...)
    }

问题是。。。如何从JSP传递datetime并与@ModelAttribute(“personalTask”)personalTask任务绑定???

可以使用格式化字符串创建新的LocalDateTime对象:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateInitializer, formatter);
使用从JSP表单获取的日期实例化新的LocalDateTime对象,并将其传递给PersonTask对象

要将日期输入中的字符串绑定到PersonTask中的字段并使用它实例化LocalDateTime对象,请执行以下操作:

public class PersonalTask{
(...)
        private String dateInitializer;

        @Column(name = "START_DATE", columnDefinition="TIMESTAMP", nullable = false)
        private LocalDateTime startDate;

        public PersonalTask(){
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            startTime = LocalDateTime.parse(dateInitializer, formatter);
        }
(...)
        public LocalDateTime getStartDate() {
                return startDate;
        }
        public void setStartDate(LocalDateTime startDate) {
                this.startDate = startDate;
        }
(...)
}
在JSP中:

<form:input path="dateInitializer" type="date" id="startDateTimePicker" name="search_message[displayDateFrom]" placeholder="YYYY-MM-DD hh:mm:ss" class="input-sm form-control"></form:input>

使用,spring已经为
日期
时间
数据类型提供了内置转换器,从文档中可以看出,它已经支持
java.Time.LocalDateTime

支持按样式模式、ISO日期时间模式或自定义格式模式字符串进行格式设置。可应用于java.util.Date、java.util.Calendar、java.lang.Long、Joda时间值类型;从Spring4和JDK8开始,到JSR-310 java.time类型

例如:

public class PersonalTask{
    @DateTimeFormat(pattern="dd/MM/yyyy")  // or any pattern you prefer 
    @Column(name = "START_DATE", columnDefinition="TIMESTAMP", nullable = false)
    private LocalDateTime startDate;
}

若我想直接传递整个PersonalTask对象,并在控制器中截获PersonalTask对象,该怎么办?我不想分割数据..我不确定是否可以直接将日期输入转换为localdatetime,但是如果您将日期输入中的字符串绑定到PersonTask中的一个字段,并使用该字段创建localdatetime objectStatic块,则在加载类时会执行该块,这是放置静态变量初始化的好位置。。。这一解决方案行不通。但我可能会使用你提出的解决方案的一部分。很好。可能会将静态块内容移动到构造函数中?当我添加此注释@DateTimeFormat(pattern=“YYY-MM-DD HH:MM:SS”)私有LocalDateTime startDate时;我正在尝试:PersonalTask p=newpersonaltask();p.setStartDate(LocalDateTime.now());System.out.println(p.getStartDate());它打印:2017-05-11T01:07:14.902我做错了什么?@CSource打印是另一回事,您的问题是将给定的字符串用户请求输入解析到
LocalDateTime
实例,而不是相反的确定,我理解,您的解决方案非常有用@DateTimeFormat(iso=iso.DATE\u-TIME)@DateTimeFormat(模式=“yyyy-MM-dd”“HH:MM:ss”)-在DateTimeFormat(pattern=“yyyy-MM-dd'HH:MM:ss”)下不起作用-在DateTimeFormat(pattern=“yyy-MM-dd HH:MM:ss”)下不起作用-在我的情况下有效
public class PersonalTask{
    @DateTimeFormat(pattern="dd/MM/yyyy")  // or any pattern you prefer 
    @Column(name = "START_DATE", columnDefinition="TIMESTAMP", nullable = false)
    private LocalDateTime startDate;
}