【发布时间】:2013-11-10 13:23:03
【问题描述】:
这就是现在的样子:
@SessionAttributes("shoppingCart")
public class ItemController {
@ModelAttribute
public ShoppingCart createShoppingCart() {
return new ShoppingCart();
}
@RequestMapping(value=RequestMappings.ADD_TO_CART + RequestMappings.PARAM_ITEM_ID, method=RequestMethod.GET)
public String addToCart(@PathVariable("itemId") Item item, @ModelAttribute ShoppingCart shoppingCart) {
if(item != null) {
shoppingCartService.addItem(shoppingCart, item);
}
return ViewNamesHolder.SHOPPING_CART;
}
}
第一次调用addToCart方法时,会通过createShoppingCart方法初始化shoppingCart对象。 addToCart 方法运行后,初始化的对象将被添加到会话中,并将从会话中使用以供以后使用。这意味着 createShoppingCart 方法只被调用一次(只要它没有从会话中删除)。
为什么 Spring 通过在需要的时候简单地创建这个对象来消除对 ModelAttribute 带注释的初始化方法的需要?然后看起来就更简单了:
@SessionAttributes("shoppingCart")
public class ItemController {
@RequestMapping(value=RequestMappings.ADD_TO_CART + RequestMappings.PARAM_ITEM_ID, method=RequestMethod.GET)
public String addToCart(@PathVariable("itemId") Item item, @ModelAttribute ShoppingCart shoppingCart) {
if(item != null) {
shoppingCartService.addItem(shoppingCart, item);
}
return ViewNamesHolder.SHOPPING_CART;
}
}
只要在会话中找不到 shoppingCart 对象,它就会被其默认构造函数初始化。 您认为做出该决定的原因是什么?
【问题讨论】:
标签: java spring spring-mvc modelattribute