Form-Parameter ist null mit Thymeleaf und Spring MVC

Ich habe ein Problem mit Thymeleaf und Spring MVC.

Ich verfolge ein Tutorial von der spring.io Websitehttp: //spring.io/guides/gs/handling-form-submission und als ich versucht habe, dieses Tutorial zu erweitern, bin ich auf ein Problem gestoßen.

Wenn ich meiner Modellklasse einen weiteren Parameter hinzufüge (in meinem Beispiel habe ich einen Date-Parameter und einen Long-Parameter hinzugefügt) und sie nicht in meine Ansicht übernommen (stellen Sie sich vor, dieser Date-Parameter ist mein letztes und so langes Änderungsdatum) parameter ist ein zufälliger Wert). Wenn ich diesen Wert übergebe, werden diese 2 Parameter in meiner Methode auf null gesetzt.

Hier sind einige meiner Codes.

Meine Modellklasse

public class Greeting {

    private long id;
    private String content;
    private Date hour;
    private long longNumber;
.... getters and setters ....
}

Meine Steuerung

@Controller
public class GreetingController {

@RequestMapping(value="/greeting", method=RequestMethod.GET)
public String greetingForm(Model model) {

    Greeting greeting = new Greeting();
    greeting.setHour(new Date());
    greeting.setLongNumber(1234L);
    System.out.println(greeting.toString());
    model.addAttribute("greeting", greeting);
    return "greeting";
}

@RequestMapping(value="/greeting", method=RequestMethod.POST)
public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) {
    System.out.println(greeting.toString());
    model.addAttribute("greeting", greeting);
    return "result";
}
}

Meine Form

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Handing Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1>Form</h1>
    <form action="#" th:action="@{/greeting}" th:object="${greeting}" method="post">
        <p>Id: <input type="text" th:field="*{id}" /></p>
        <p>Message: <input type="text" th:field="*{content}" /></p>
        <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
    </form>
</body>
</html>

Die Ergebnisseite

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Handing Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <h1>Result</h1>
    <p th:text="'id: ' + ${greeting.id}" />
    <p th:text="'content: ' + ${greeting.content}" />
    <p th:text="'Date: ' + ${greeting.hour}" />
    <a href="/greeting">Submit another message</a>
</body>
</html>

Dies sind meine Konsolenabdrücke meiner Modellklasse

Greeting [id=0, content=null, hour=Sun Apr 26 22:29:25 GMT-03:00 2015, longNumber=1234]
Greeting [id=0, content=aaaa, hour=null, longNumber=0]

Wie Sie sehen können, werden beide meiner Parameter, die nicht in meiner Ansicht sind, nach dem Beitrag (der zweiten Zeile) zu Null, und in der ersten Zeile haben sie Werte. Ich verstehe nicht warum, weil ich von einem anderen guten Framework (JSF) stamme und dort kein solches Problem habe. Nur um zu wissen, ich verwende Spring 4, genau wie im Tutorial, und warum habe ich einen Parameter, der nicht in meiner Ansicht ist? Da einige dieser Parameter einige Daten enthalten, wie z. B. das Datum der letzten Aktualisierung des Registers, den letzten Benutzer, der das Register aktualisiert hat, und meine Anwendungs-ID.

ann mir jemand helfen, eine Antwort darauf zu finde

Bearbeiten

Nach einiger Zeit und Experimenten fand ich eine Lösung für mein Problem. Folgen Sie meinem Code, der genau so funktioniert, wie er sein soll:

@Controller
@SessionAttributes({"obj"})
public class MyController {

    @RequestMapping(value = "/path", method = RequestMethod.GET)
    public ModelAndView myGet() {       
        ModelAndView modelAndView = new ModelAndView("view");
        MyClass object = new MyClass();
        modelAndView.addObject("obj", object );     
        return modelAndView;
    }

    @RequestMapping(value = "/path", method = RequestMethod.POST)
    public ModelAndView myPost(@ModelAttribute("obj") @Validated MyClass object, BindingResult result){

        ModelAndView modelAndView = new ModelAndView("view");       
        if(result.hasErrors())
            modelAndView.addObject("obj",object);
        else 
            service.save(object);
        return modelAndView;
    }   
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage