2014-05-16 35 views
9

Bir formda bir tarih girmeyi denediğimde bu hatayı alıyorum. enter image description herejava.lang.String türünün özellik değeri, türüne dönüştürülemedi 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 denetleyicisi

... 
<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> 
     ... 

I "yyyy/AA/aa gibi aynı hata (ve farklı biçimleri ile aşağıdaki yazdığı ")

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

Ben de sınıfta ek açıklama (aynı zamanda farklı biçimleri) fakat

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

Post JSP'nin kodu. –

+0

Sanırım hatayı buldum. Yeni SimpleDateFormat ("yyyy-MM-dd") için yeni SimpleDateFormat ("dd/AA/yyyy") değiştirdim – Joe

+1

Desen, "yyyy-MM-dd" olmalıdır. MM (ay) ve mm (dakika) ile dikkatli olun. –

cevap

15

denetleyicisi bu ekle aynı hatayı eklemeye çalıştık. DateFormat öğelerini yerel tercihinize göre değiştirin.

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

Modelinizdeki (tercihlerinize için uyarlanması biçimini ve TemporalType) bu ek açıklamaları kullanmayı düşünün

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

Kendi DateFormat'ınızı CustomDateEditor bağlayıcısına sağlamanız gerekiyorsa bu, @DateTimeFormat'ın pattern parametresiyle nasıl ilişkilendirilir? – Mouscellaneous

+0

@ DateTimeFormat alanı yine string'e çevirirseniz yardımcı olabilir. Örneğin. (Sadece XML, Json'a dönüştürün) ya da sadece JSP @ Temporal'da özelliği almak, alanı veritabanında DATE veya DATETIME alanı olarak saklarsanız, Temporal kontrol edecektir. – borjab

+0

@borjab, çok teşekkürler! InitBinder'ı tamamen unuttum ... Çok zaman kurtardın! – fromSPb

2

basitçe @DateTimeFormat ekleyin (pattern = "yyyy-AA-gg") ile (-)

örnek:

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

Eh, bu cevap 2 yıl öncesinden beri gereksiz olduğunu düşünüyorum. – kaldoran

İlgili konular