Spring multiple @ModelAttribute methods in the same @Controller
The documentation doesn't mention anywhere that it's possible to use @ModelAttribute on an argument to a @ModelAttribute annotated method, like you're doing in your "getPermissionsModel()" method. It's possible that's not supported, since it's not documented as being supported. You might want to try either removing the "@ModelAttribute("user") User user" argument from your "getPermissionsModel()" method, and/or instead try just using one @ModelAttribute method to set all your model attributes:
@ModelAttribute
public void setAttributes(@PathVariable("userId") String userId, Model model) {
model.addAttribute(new PasswordValidation());
model.addAttribute(userManager.getUser(userId));
model.addAttribute(new PermissionsAvailable());
}
Related videos on Youtube
droidpl
Updated on June 04, 2022Comments
-
droidpl almost 2 years
I have a page with two different forms (with two different submits) on Spring MVC 3, and I have a problem with @ModelAttribute methods. When I have two on the same controller, they are not always executed making the model to be NULL.
The code:
@Controller @RequestMapping(value = "/session/admin/permission/{userId}") public class PermissionController { @Autowired private UserManager userManager; @ModelAttribute("passwordValidation") private PasswordValidation getPasswordModel(){ return new PasswordValidation(); } @ModelAttribute("user") private User getUserModel(@PathVariable("userId") String userId){ //This is not executed return userManager.getUser(userId); } @ModelAttribute("permissionsAvailable") private PermissionsAvailable getPermissionsModel(@ModelAttribute("user") User user) { return new PermissionsAvailable(); } @RequestMapping(method = RequestMethod.GET) public String adminPermission(){ return "/security/permission"; } @RequestMapping(method = RequestMethod.POST, params="changeRoles") public String modifyPermission(@ModelAttribute("permissionsAvailable") PermissionsAvailable permissions, HttpServletRequest request, @ModelAttribute("user") User user, final RedirectAttributes redirectAttributes){ //Modify something } @RequestMapping(method = RequestMethod.POST, params="changePassword") public String modifyPassword( @ModelAttribute("passwordValidation") PasswordValidation passwordValidation, @ModelAttribute("user") User user, HttpServletRequest request, BindingResult bindingResult, final RedirectAttributes redirectAttributes){ return "newpage"; } }
Don't know why, sometimes everything goes ok and every method is executed, but sometimes they are not executed.
UPDATE: I have two different controllers with the same problem so it must be an error on Spring or something I'm doing wrong.
Thanks.
-
droidpl almost 11 yearsYeh that works! It seems that you ae right it is not supported!