Spring Web MVC и новые компоненты - PullRequest
3 голосов
/ 02 июня 2011

Мы работаем над приложением Spring 3.0.5 Web MVC. В нашем коде мы довольно часто делаем что-то вроде этого:

@ModelAttribute(ModelKeys.SOME_BEAN)
public SomeBean newSomeBean() {
  return new SomeBean();
}

Я думаю, что в этом нет необходимости. Но если это действительно не так, то мне интересно, как это удалось проскользнуть через столько обзоров кода? В моем понимании, если метод контроллера хотел NEW SomeBean, тогда достаточно будет аннотировать параметр в этом методе с помощью @ModelAttribute? Затем Spring будет использовать конструктор по умолчанию для создания нового необходимого компонента для вызова метода контроллера, например ::10000

@RequestMapping(method = RequestMethod.POST)
public String doIt(
  @ModelAttribute(ModelKeys.SOME_BEAN) final SomeBean bean,
  final BindingResult bindingResult)
{
  ...
}

здесь, Spring запустит экземпляр SomeBean и попытается привязать к нему данные из данных POST, верно? Нет необходимости в методе, как показано в первом фрагменте кода? Пожалуйста, вы можете подтвердить это или высказать свое мнение по этому поводу? Буду ли я вводить риск, если я просто продолжу и уберу все эти методы, которые не делают ничего, кроме нового для пустого компонента?

1 Ответ

2 голосов
/ 22 июня 2011

@ModelAttribute аннотация для метода не связывает атрибуты компонента с параметрами HTTP-запроса.Это ключевое отличие от той же аннотации для параметра метода.Такой подход полезен для заполнения некоторых данных, которые не зависят от параметров запроса в модели, например, значений комбинированных списков, взятых из словарей.Это особенно полезно, если у вас есть несколько методов-обработчиков в контроллере, например, для просмотра / изменения / удаления одного и того же типа объекта, и вам нужен одинаковый набор атрибутов модели во всех них.

...