Пружина нескольких методов @ModelAttribute в одном и том же @Controller

У меня есть страница с двумя разными формами (с двумя разными отправками) в 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 или что-то я делаю неправильно.

Благодарю.

1 ответ

Решение

В документации нигде не упоминается, что можно использовать @ModelAttribute для аргумента аннотированного метода @ModelAttribute, как вы делаете это в своем методе "getPermissionsModel()". Возможно, это не поддерживается, так как это не задокументировано как поддерживаемое. Возможно, вы захотите либо удалить аргумент "@ModelAttribute("user") User 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());
}
Другие вопросы по тегам