В чем разница между @ModelAttribute, model.метод addattribute весной?
Я новый весенний ученик.я действительно смущен тем, в чем разница между двумя понятиями:
- @ModelAttribute
- модель.метод 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";
}