J'ai un contrôleur annoté Spring 2.5 dans lequel j'ai une méthode annotée avec @RequestMapping (method = RequestMethod.GET), qui effectue une certaine logique pour remplir le modèle.Liaison de données des paramètres annotés @ModelAttribute
J'ai également une méthode annotée avec @RequestMapping (method = RequestMethod.POST) qui effectue la requête. Cette méthode a un paramètre annoté @ModelAttribute qui contient mon propre formulaire pojo, appelons-le MyForm. J'ai aussi une méthode d'initialisation pour MyForm, également annotée avec @ModelAttrribute. Maintenant, jusqu'à présent tout fonctionne comme prévu: sur une demande POST les données du formulaire se lient à MyForm et je peux le traiter.
Le problème est que je veux être en mesure de pré-remplir le formulaire en transmettant des paramètres de requête (GET). Puisque j'ai la méthode @ModelAttribute pour MyForm, j'obtiens une instance MyForm dans mon modèle, mais elle n'est pas remplie sauf si je l'utilise spécifiquement comme paramètre pour ma méthode GET.
Pourquoi dois-je faire cela, est-il possible de forcer la liaison de données sur mon formulaire pour une demande GET d'une manière différente? Je passe maintenant juste dans le paramètre, mais parce qu'il est déjà dans le modèle, je n'ai rien à faire avec, résultant en un paramètre de méthode inutilement laid.
[Edit: quelques exemples de code pour illustrer]
Le contrôleur qui ne remplit pas le formulaire sur une requête get:
@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
}
}
Quand je change la signature de la méthode de la méthode handlePage, il obtient peuplé sur une requête get ...
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
//Do some stuff to populate the model....
}
Quand vous dites que vous avez votre propre formulaire, vous voulez dire juste un objet de domaine, n'est-ce pas? (par opposition à une implémentation de forme de ressort personnalisé.) Votre vue est-elle juste une JSP standard? –
Oui, vous avez raison. Juste un objet de domaine. Ma vue n'est pas une JSP, mais je vais vous épargner les détails de l'implémentation de la vue (pas la mienne), car je peux écrire un livre à ce sujet ... –