2013-04-16 17 views
3

我在Spring MVC 3上有兩種不同形式的頁面(有兩個不同的提交),並且我有@ModelAttribute方法的問題。當我在同一個控制器上有兩個控制器時,它們並不總是被執行使模型成爲NULL。在同一個@Controller中彈出多個@ModelAttribute方法

代碼:

@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"; 
    } 
} 

不知道爲什麼,有時候一切正常的話,執行每一個方法,但有時他們不執行。

更新:我有兩個不同的控制器具有相同的問題,所以它必須是春天的錯誤或我做錯了什麼。

謝謝。

回答

6

文檔沒有提及可以在@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()); 
} 
+0

那是行得通的!看來你是正確的,它不被支持! – droidpl

相關問題