Ich habe einen mit Spring2.5 annotierten Controller, in dem ich eine Methode mit @RequestMapping (method = RequestMethod.GET) annotiert habe, die eine Logik zum Füllen des Modells ausführt.Datenbindung von @ModelAttribute mit Anmerkungen versehene Parameter
Ich habe auch eine Methode mit @RequestMapping annotiert (Methode = RequestMethod.POST), die die Anfrage ausführt. Diese Methode hat einen Annotated-Parameter @ModelAttribute, der mein eigenes Form-Pojo enthält, nennen wir es MyForm. Ich habe auch eine Initialisierungsmethode für MyForm, auch mit @ModelAttrribute kommentiert. Jetzt funktioniert alles wie erwartet: Bei einer POST-Anfrage werden die Formulardaten an MyForm gebunden und ich kann sie verarbeiten.
Das Problem ist, dass ich in der Lage sein möchte, das Formular vorzufüllen, indem Sie (GET) Anforderungsparameter übergeben. Da ich die @ ModelAttribute-Methode für MyForm habe, erhalte ich eine MyForm-Instanz in meinem Modell, aber sie wird nicht gefüllt, wenn ich sie nicht explizit als Parameter für meine GET-Methode verwende.
Warum muss ich dies tun, ist es möglich, Datenbindung auf meinem Formular für eine GET-Anfrage auf andere Weise zu erzwingen? Ich übergebe nun einfach den Parameter, aber weil er bereits im Modell ist, muss ich nichts damit anfangen, was zu einem hässlichen unbenutzten Methodenparameter führt.
[Edit: einige Codebeispiele veranschaulichen]
Der Controller, der nicht die Form auf einer Anforderung erhalten hat bevölkern:
@Controller
public class MyController {
@ModelAttribute("myForm")
public MyForm createForm() {
return new MyForm();
}
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model) {
//Do some stuff to populate the model....
}
@RequestMapping(method=RequestMethod.POST)
public void processForm(@ModelAttribute("myForm") MyForm myForm) {
//Process the form
}
}
Wenn ich die Methode Signatur der handlePage Methode zu ändern, es wird auf einem Erhaltungs-Anforderungs-bevölkert ...
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
//Do some stuff to populate the model....
}
Wenn Sie sagen, Sie haben Ihre eigene Form pojo, meinen Sie nur ein Domain-Objekt, oder? (Im Gegensatz zu einigen benutzerdefinierten Spring Form-Implementierung.) Ist auch Ihre Ansicht nur eine Standard-JSP? –
Ja, du hast Recht. Nur ein Domain-Objekt. Meine Ansicht ist keine JSP, aber ich erspare Ihnen die Details der Ansichtsimplementierung (nicht meine eigene), weil ich ein Buch darüber allein schreiben kann ... –