2014-12-22 5 views
0

Ниже приведен код для DatePicker на input элемент с идентификатором, как ENDDATESpring DateTimeFormat не работает с JQuery UI Datepicker

$('#endDate').datepicker({ 
    changeMonth: true, 
    changeYear: true, 
    dateFormat: 'mm/yy', 
    }); 

Она удаляет часть даты, и только месяц и год показан в формате " MM/YYYY».

Я привязал этот элемент к виду компонентов, как показано ниже.

<form:input id="endDate" onkeydown="return false;" readonly="readonly" path = "endDate" /> 

В собственности фасоли я использовал org.springframework.format.annotation.DateTimeFormat, как показано ниже

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

DatePicker прекрасно, как ожидается, работает, однако я получаю следующее исключение, когда форма передается на контроллер.

org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors 
Field error in object 'SpringWeb' on field 'endDate': rejected value [12/2014]; codes [typeMismatch.SpringWeb.endDate,typeMismatch.endDate,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [SpringWeb.endDate,endDate]; arguments []; default message [endDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'endDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "12/2014" from type 'java.lang.String' to type 'java.util.Date'; nested exception is java.lang.IllegalArgumentException: Invalid format: "12/2014" is malformed at "14"] 
Field error in object 'SpringWeb' on field 'startDate': rejected value [12/2014]; codes [typeMismatch.SpringWeb.startDate,typeMismatch.startDate,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [SpringWeb.startDate,startDate]; arguments []; default message [startDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'startDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "12/2014" from type 'java.lang.String' to type 'java.util.Date'; nested exception is java.lang.IllegalArgumentException: Invalid format: "12/2014" is malformed at "14"] 
    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:436) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    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:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 

В чем причина? Что может быть решением?

+1

вы пробовали '@DateTimeFormat (шаблон = "MM/YY")' – artm

ответ

1

С вашей StackTrace вы можете увидеть сообщение Invalid format: "12/2014" is malformed at "14" Вам нужно изменить шаблон для private Date endDate от "MM/yyyy" к "MM/yy", потому что yyyy означает год выражается в 4-х цифр, как 2014 однако вы Уходящий год в 2-х цифр 14

+0

I месяц и год, т.е. 12/2014. –

0

Чтобы решить эту проблему проблема, которую я реализовал метод InitBinder в контроллере, регистрации пользовательского редактора для конкретного поля:

@InitBinder 
public void binder(WebDataBinder binder) { 
    DateFormat dateOnlyFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    dateOnlyFormat.setLenient(true); 
    binder.registerCustomEditor(Date.class, "dataInicio", new CustomDateEditor(dateOnlyFormat, true)); 
} 
Смежные вопросы