imaginar un código como este:@ModelAttribute en un método
@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) {
...
}
utilizo un aglutinante init para evitar que un campo se puede binded y me marca un método (prepareUser()) con @ModelAttribute para preparar mi objeto Usuario antes de que esté encuadernado. Entonces cuando invoco/user/save, se ejecutan initBinder() y prepareUser().
He configurado "usuario" en @InitBinder y @ModelAttribute para que Spring-MVC pueda entender que este método solo debe aplicarse antes de ejecutar un método con @ModelAttribute ("usuario").
El problema es que el método anotado con @ModelAttribute ("usuario") se ejecuta antes de cada método asignado de este controlador. Por ejemplo, si invoco/users prepareUser se ejecuta antes del método list(). ¿Cómo puedo hacer que este preparador se ejecute solo antes de que el método save() tenga todos los métodos en el mismo controlador?
Gracias
¿Qué hace 'prepareUser' en realidad? – skaffman
@skaffman toma el nombre de usuario param y carga el objeto Usuario desde la base de datos, por lo que no se sobrescriben todos los datos que no pueden enlazarse (por ejemplo, contraseña) con valores nulos cuando se conserva después de la vinculación – Javi