В чем разница между @ModelAttribute, model.метод addattribute весной?

Я новый весенний ученик.я действительно смущен тем, в чем разница между двумя понятиями:

  1. @ModelAttribute
  2. модель.метод addattribute

ниже есть два значения" user".Эти же самое?Почему я должен использовать это? Спасибо всем

@RequestMapping(method = RequestMethod.GET)
public String setupForm(ModelMap model) {
    model.addAttribute("user", new User());
    return "editUser";
}

@RequestMapping(method = RequestMethod.POST)
public String processSubmit( @ModelAttribute("user") User user, BindingResult result, SessionStatus status) {
    userStorageDao.save(user);
    status.setComplete();
    return "redirect:users.htm";
}

1 ответов


при использовании в аргументе,@ModelAttribute ведет себя следующим образом:

@ModelAttribute в аргументе метода указывает, что аргумент должен быть извлечен из модели. Если аргумент отсутствует в модели, его следует сначала создать, а затем добавить в модель. После присутствия в модели поля аргумента должны быть заполнены из всех параметров запроса, имеющих совпадающие имена. Это известно как привязка данных в Spring MVC, очень полезный механизм, который спасает вас от необходимости анализировать каждое поле формы индивидуально. http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#mvc-ann-modelattrib-method-args

Это очень мощная функция. В вашем примере объект User автоматически заполняется из POST-запроса Spring.

первый метод, однако, просто создает экземпляр Userи добавляет его в модель. Это может быть написано так, чтобы принести пользу с @ModelAttribute:

@RequestMapping(method = RequestMethod.GET)
public String setupForm(@ModelAttribute User user) {
    // user.set...
    return "editUser";
}