当前位置: 首页 > 知识库问答 >
问题:

如何使用java8 api(LocalDateTime)将LocalDateTime从jsp传递到控制器?

那开济
2023-03-14

我需要你的帮助。假设我的JSP中有form:form,表单内部是form:input with 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>

在控制器中,我有方法

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addProfileTask(@ModelAttribute("personalTask")PersonalTask task, Principal principal){

            return "taskManager";
    }

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传递日期时间并与@ModelAtcm(“个人任务”)个人任务任务绑定??

共有2个答案

卢权
2023-03-14

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

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateInitializer, formatter);

使用从JSP表单中获取的日期实例化一个新的LocalDateTime对象,并将其传递给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>
白迪
2023-03-14

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

支持按样式模式、ISO 日期时间模式或自定义格式模式字符串进行格式设置。可以应用于java.util.Date,java.util.Calendar,java.lang.Long,Joda-Time值类型;从Spring 4和JDK 8开始,到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;
}
 类似资料: