我在Spring MVC 3上有一个包含两种不同形式(有两个不同的提交)的页面,我遇到了@ModelAttribute方法的问题。当我在同一个控制器上有两个时,它们并不总是被执行,使模型为NULL。
代码:
@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";
}
}
不知道为什么,有时一切正常,每个方法都被执行,但有时它们不会被执行。
更新:我有两个不同的控制器有同样的问题所以它一定是Spring上的错误或者我做错了。
感谢。
答案 0 :(得分:6)
文档中没有提及可以在@ModelAttribute注释方法的参数上使用@ModelAttribute的任何地方,就像您在" getPermissionsModel()&中所做的那样#34;方法。它可能不受支持,因为它没有被记录为受支持。您可能想要尝试删除" @ModelAttribute(" user")用户用户"你的" getPermissionsModel()"方法,和/或只是尝试使用一个@ModelAttribute方法来设置所有模型属性:
@ModelAttribute
public void setAttributes(@PathVariable("userId") String userId, Model model) {
model.addAttribute(new PasswordValidation());
model.addAttribute(userManager.getUser(userId));
model.addAttribute(new PermissionsAvailable());
}