Когда аннотированный метод @ModelAttribute вызывается точно?
Ниже приведен простой контроллер формы Spring для обработки пользовательских запросов "добавить элемент":
@Controller
@RequestMapping("/addItem.htm")
public class AddItemFormController {
@Autowired
ItemService itemService;
@RequestMapping(method = RequestMethod.GET)
public String setupForm(ModelMap model) {
return "addItem";
}
@ModelAttribute("item")
public Item setupItem() {
Item item = new Item();
return item;
}
@RequestMapping(method = RequestMethod.POST)
protected String addItem(@ModelAttribute("item") Item item) {
itemService.addItem(item);
return "itemAdded";
}
}
Я где-то читал, что: (...) the @ModelAttribute is also pulling double duty by populating the model with a new instance of Item before the form is displayed and then pulling the Item from the model so that it can be given to addItem() for processing.
Мой вопрос: когда и как часто setupItem()
будет называться точно? Будет ли Spring сохранять отдельную копию модели, если пользователь запрашивает несколько элементов добавления?
1 ответ
setupItem
будет вызываться один раз за запрос к любому из @RequestMapping
методы в этом контроллере, прямо перед @RequestMapping
метод называется. Так что для вашего addItem
метод поток будет - вызовите setupItem
создание атрибута модели с именем item
, так как ваш addItem
Аргумент также помечен @ModelAttribute
, item
будет улучшен с помощью параметров POST'а на этом этапе.