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

如何使用Spring MVC在DTO上绑定日历

邢项禹
2023-03-14
<input type="text" id="date" name="date" />
@RequestMapping(value = "/newholiday", method=RequestMethod.POST)
public String cadastrar(ModelMap model, HolidayDTO dto) {
    System.out.println(dto.getDate());
    return "/newholiday";
}

DTO

public class HolidayDTO extends DTO<Holiday> {
    private Calendar date;
}

如果是直接的,则返回一个异常:

HTTP ERROR 500

Problem accessing /cemiterio/feriados/cadastrar/. Reason:

    org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'holidayDTO' on field 'date': rejected value [23/12/1988]; codes [typeMismatch.holidayDTO.date,typeMismatch.date,typeMismatch.java.util.Calendar,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [holidayDTO.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Calendar' for property 'date'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Calendar] for property 'date': no matching editors or conversion strategy found]
Caused by:

org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'holidayDTO' on field 'date': rejected value [23/12/1988]; codes [typeMismatch.holidayDTO.date,typeMismatch.date,typeMismatch.java.util.Calendar,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [holidayDTO.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Calendar' for property 'date'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Calendar] for property 'date': no matching editors or conversion strategy found]
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:810)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

共有1个答案

穆洋
2023-03-14

我强烈建议您不要使用calendar对象,而是使用Joda Time,因为您可以灵活地进行日期和时间操作,而且最重要的是,它是不可变的。将Jodadatetime转换为java.sql.date非常简单:-

DateTime dateTime = ...;
java.sql.Date sqlDate = new java.sql.Date(dateTime.getMillis());

这里有一个例子:-

Spring形式

public class MyForm {

    @DateTimeFormat(pattern = "MM/dd/yyyy")
    private DateTime dateTime;

    public DateTime getDateTime() {
        return dateTime;
    }

    public void setDateTime(DateTime dateTime) {
        this.dateTime = dateTime;
    }
}
@Controller
@RequestMapping(value = "/")
public class HomeController {

    @RequestMapping(method = RequestMethod.POST)
    public String post(@ModelAttribute MyForm myForm) {
        System.out.println("@@@@@@: " + myForm.getDateTime());
        return "home";
    }
}
<spring:form modelAttribute="myForm">
    <spring:input path="dateTime"/>
    <spring:button>Submit</spring:button>
</spring:form>
 类似资料:
  • 下面是我的控制器和Init活页夹 这样,我想要的日期格式就不起作用了,这是我得到的输出expenseDate=Wed Mar 18 05:30:00 IST 2015,但我希望它变成一种特定的格式,比如yyyy-MM-dd。。。建议我怎么做。

  • 问题内容: 假设我是关于DTO的新手。我不知道将DTO与JSF,Spring和Hibernate一起使用是否正确。 让我解释一下,到目前为止,我已经在业务层和表示层中使用了直接从数据库创建的实体bean。现在,我决定尝试使用DTO方法,但是我不明白它们如何提供帮助。 例如,如果我有两个类User和Message,而一个用户有更多关联的消息;如何从数据库填充DTO?还是在业务层手动填充DTO?有人可

  • 问题内容: 一个简单的问题:在通过Python绑定使用Selenium时,如何完全禁用日志记录,示例代码如下: 我已经尝试过类似的事情: 甚至: 但文件“ chromedriver.log”仍出现在每次新的测试中。 问题答案: Chrome浏览器的网络驱动程序的源代码显示了名为的选项的存在。 因此,如果要删除文件,可以将此属性设置为 如果您在Linux / Unix下运行; 在窗户下 希望能帮助到

  • 问题内容: 快速使用以下语法进行流控制 在这种情况下 ,真值上下文的语义是什么 ? 是否允许 表达式链接 (如下所示)? 如果是这样,布尔表达式是否会短路? 问题答案: 首先检查它是否为零或是否有数据。如果为零,则不会执行if语句。如果有数据,则将数据解包并分配给if语句的范围。然后执行括号内的代码。 无法在一个if语句中链接此功能。不直接评估为布尔值。最好将“ if let”视为一个特殊关键字。

  • 我正在创建一个接口和链表的实现,如Java1.8: 接口没有编译器问题,但给出了错误其中我有

  • 我正在寻找解决我当前问题的方法。我有一个经典的POJO由Hibernate用变量映射。 此实体以时间戳变量(2013-09-25 22:13:18.000)保存在MySQL数据库中。 我正在使用Spring表单显示保存在POJO中的数据。 编辑:我已经有了,但它只在通过窗体创建新对象时起作用,因此它将强制转换为。但是当我想用DB中的现有数据填充表单输入时,它就不起作用了。 我使用的是没有Joda