2014-05-16 18 views
9

Otrzymuję ten błąd, gdy próbuję wprowadzić datę w formularzu. enter image description hereNie można przekonwertować wartości właściwości typu java.lang.String na wymagany typ java.util.Date

TaskController

@RequestMapping(value = "/docreatetask", method = RequestMethod.POST) 
public String doCreateTask(Model model, @Valid Task task, 
     BindingResult result, Principal principal, 
     @RequestParam(value = "delete", required = false) String delete) { 
    System.out.println(">TaskController doCreateTask " + task); 

    if (result.hasErrors()) { 
     System.out.println("/docreatetask in here"); 
     model.addAttribute("task", task); 
     System.out.println("+++++"+task.getDeadline());// deadline is null 
     return "createtask"; 
    } 
     ... 

Create.jsp

... 
<form:form method="POST" 
action="${pageContext.request.contextPath}/docreatetask" 
commandName="task"> 
<table class="formtable"> 
    <tr> 
     <td class="label">Task</td> 
     <td><form:input cssClass="control" path="taskname" 
      name="taskname" type="text" /><br /> 
       <form:errors path="taskname" cssClass="error" /></td> 
     </tr> 
    <tr> 
     <td class="label">Description</td> 
     <td><form:textarea cssClass="control" path="description" 
      name="description"></form:textarea><br /> 
        <form:errors path="description" cssClass="error" /></td> 
    </tr> 
    <tr> 
     <td class="label">Deadline (dd/mm/yyyy)</td> 
     <td><form:input cssClass="control" path="deadline" 
      name="deadline" type="date" /><br /> 
       <form:errors path="deadline" cssClass="error"></form:errors></td> 
    </tr> 
     ... 

W regulatorze ja pisał z tego samego błędu (i różnych formatów, takich jak „YYYY/MM/DD ")

@InitBinder 
public void initBinder(WebDataBinder webDataBinder) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    dateFormat.setLenient(false); 
    webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); 
} 

Próbowałem również dodać adnotację w klasie (a także z różnych formatów), ale sam błąd

​ ... 
    @Column(name = "deadline") 
    @DateTimeFormat(pattern = "dd/MM/yyyy") 
    private Date deadline; 
    ... 
+0

postu kod Twojego JSP. –

+0

Myślę, że znalazłem błąd. Zmieniłem nowy SimpleDateFormat ("dd/MM/rrrr") dla nowego SimpleDateFormat ("rrrr-MM-dd") – Joe

+1

Wzorzec powinien mieć postać "" rrrr-MM-dd ". Ostrożnie z MM (miesiące) i mm (minuty). –

Odpowiedz

15

dodać to w kontrolerze. Zmień dateFormat na preferencje regionalne.

@InitBinder  
public void initBinder(WebDataBinder binder){ 
    binder.registerCustomEditor(  Date.class,  
         new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true, 10)); 
} 

rozważyć użycie tej adnotacji w modelu (dostosowanie formatu i TemporalType do swoich preferencji)

@DateTimeFormat(pattern = "dd/MM/yyyy") 
@Temporal(TemporalType.DATE) 
+0

Jak to się kojarzy z parametrem wzorca @DateTimeFormat, jeśli musisz podać swój własny DateFormat do powiązania CustomDateEditor? – Mouscellaneous

+0

@ DateTimeFormat może być pomocne, jeśli ponownie rzucisz pole na ciąg. Na przykład. (Konwertuj na format XML, Json itp.) Lub po prostu przejęcie właściwości w JSP @ Temporal będzie kontrolować, jeśli pole zostanie zapisane jako pole DATA lub DATETIME w bazie danych. – borjab

+0

@borjab, wielkie dzięki! Całkowicie zapomniałem o initBinder ... Uratowałeś mi dużo czasu! – fromSPb

2

prostu dodać @DateTimeFormat (wzorzec = "yyyy-MM-dd") z (-)

przykład:

@DateTimeFormat(pattern = "yyyy-MM-dd") 
private Date dateNaissance; 
+1

Cóż, myślę, że ta odpowiedź jest niepotrzebna, ponieważ jest sprzed 2 lat. – kaldoran

Powiązane problemy