以下是一个简单的Spring表单 Controller ,用于处理“添加项目”用户请求:
@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是否会保留单独的模型副本? 最佳答案
在对setupItem
方法进行调用之前,将对该 Controller 中的任何@RequestMapping
方法的每个请求调用一次@RequestMapping
。因此,对于您的addItem
方法,流程将是-调用setupItem
,创建一个名为item
的模型属性,因为您的addItem
参数也使用@ModelAttribute
进行了标记,因此item
将通过POST'ed参数进行增强。