Imaginons un code comme celui-ci:@ModelAttribute dans un procédé
@RequestMapping(value="/users", method=RequestMethod.GET)
public String list(Model model) {
...
}
@InitBinder("user")
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("password"); // Don't allow user to override the value
}
@ModelAttribute("user")
public User prepareUser(@RequestParam("username") String username){
...
}
@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {
...
}
J'utilise un liant d'initialisation afin d'éviter qu'un champ peut être binded et je marquer un procédé (prepareUser()) avec @ModelAttribute pour préparer mon objet Utilisateur avant qu'il ne soit lié. Donc, quand j'appelle/user/save initBinder() et prepareUser() sont exécutés.
J'ai défini "user" dans @InitBinder et @ModelAttribute afin que Spring-MVC puisse comprendre que ces méthodes doivent être appliquées avant d'exécuter une méthode avec @ModelAttribute ("user").
Le problème est que la méthode annotée avec @ModelAttribute ("user") est exécutée avant chaque méthode mappée de ce contrôleur. Par exemple si j'appelle/users prepareUser est exécuté avant la méthode list(). Comment puis-je faire que ce préparateur est seulement exécuté avant la méthode save() ayant toutes les méthodes dans le même contrôleur?
Merci
Que fait réellement 'prepareUser'? – skaffman
@skaffman il prend le nom d'utilisateur param et charge l'objet User de la base de données, donc toutes les données qui ne peuvent pas être liées (mot de passe par exemple) ne sont pas remplacées par des valeurs nulles quand elles sont persistantes après la liaison – Javi