以下是一个简单的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参数进行增强。

10-04 10:50