wake-up-neo.com

Fehler beim Konvertieren des Eigenschaftswerts des Typs Java.lang.String in den erforderlichen Typ Java.util.Date

Ich erhalte diese Fehlermeldung, wenn ich versuche, ein Datum in ein Formular einzugeben.enter image description here

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

Im Controller habe ich folgendes geschrieben mit dem gleichen Fehler (und verschiedenen Formaten wie "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));
}

Ich habe auch versucht, Anmerkungen in der Klasse (auch mit unterschiedlichen Formaten), aber denselben Fehler hinzuzufügen

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

Fügen Sie dies im Controller hinzu. Ändern Sie das Datumsformat in Ihre Ländereinstellung. 

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

Erwägen Sie die Verwendung dieser Anmerkungen in Ihrem Modell (Format und TemporalType für Ihre Präferenzen anpassen).

@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
18
borjab

fügen Sie einfach @DateTimeFormat (pattern = "jjjj-MM-tt") mit (-)

beispiel:

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date dateNaissance;
6
xXxlazharxXx

Sie müssen in BaseController für initBinder wechseln

@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
    dateFormat.setLenient(false);
    binder.registerCustomEditor(Date.class, null,  new CustomDateEditor(dateFormat, true));
}
0
WLiu