以下是一个简单的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会保留单独的模型副本吗?
答案 0 :(得分:6)
在调用setupItem
方法之前,对于此控制器中的任何@RequestMapping
方法的每个请求,将调用@RequestMapping
一次。因此,对于您的addItem
方法,流程将调用setupItem
,创建名为item
的模型属性,因为您的addItem
参数也标有@ModelAttribute
,item
将在此时使用POST参数进行增强。