Когда аннотированный метод @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'а на этом этапе.

Другие вопросы по тегам