gpt4 book ai didi

forms - 在同一个@Controller 中使用多个@ModelAttribute 方法

转载 作者:行者123 更新时间:2023-12-01 07:48:20 24 4
gpt4 key购买 nike

我在 Spring MVC 3 上有一个页面有两种不同的形式(有两种不同的提交),我对 @ModelAttribute 方法有疑问。当我在同一个 Controller 上有两个时,它们并不总是被执行,使模型为 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";
}
}

不知道为什么,有时一切正常,每个方法都执行了,但有时却没有执行。

更新:我有两个不同的 Controller 有同样的问题所以它一定是 Spring 上的错误或者我做错了什么。

谢谢。

最佳答案

该文档在任何地方都没有提到可以在 @ModelAttribute 注释方法的参数上使用 @ModelAttribute,就像您在“getPermissionsModel()”方法中所做的那样。这可能不受支持,因为它没有被记录为受支持。您可能想尝试从“getPermissionsModel()”方法中删除“@ModelAttribute("user") User user”参数,和/或尝试仅使用一个@ModelAttribute 方法来设置所有模型属性:

@ModelAttribute
public void setAttributes(@PathVariable("userId") String userId, Model model) {
model.addAttribute(new PasswordValidation());
model.addAttribute(userManager.getUser(userId));
model.addAttribute(new PermissionsAvailable());
}

关于forms - 在同一个@Controller 中使用多个@ModelAttribute 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16048348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com