【发布时间】:2013-04-28 16:41:04
【问题描述】:
我最近正在尝试学习 Spring MVC。 @SessionAttributes 和 @ModelAttribute 注解的功能我好像不太了解。
这是我的控制器的一部分:
@SessionAttributes({"shoppingCart", "count"})
public class ItemController {
@ModelAttribute("shoppingCart")
public List<Item> createShoppingCart() {
return new ArrayList<Item>();
}
@ModelAttribute("count")
public Integer createCount() {
return 0;
}
@RequestMapping(value="/addToCart/{itemId}", method=RequestMethod.GET)
public ModelAndView addToCart(@PathVariable("itemId") Item item,
@ModelAttribute("shoppingCart") List<Item> shoppingCart, @ModelAttribute("count") Integer count) {
if(item != null) {
shoppingCart.add(item);
count = count + 2;
}
return new ModelAndView(new RedirectView("showAllItems"));
}
基本上有一个列出所有项目的jsp。 Wenn 用户点击特定商品的“addToCart”,该商品将被添加到购物车列表中。我最好先解释一下我对这个控制器的理解,你可以告诉我我没有得到什么。
第一次调用 ItemController 时,会执行 createShoppingCart 和 createCount 方法,并将返回参数保存在 session 中,名称分别为“shoppingCart”和“count”。当用户调用 url ".../addToCart/1" 时,会调用 addToCart 方法。由于我需要会话中的方法签名 2 值,因此控制器将在会话中查看这些值是否已经存在。是的。。此时 shoppingCart 是一个空列表,count 为 0。在方法体中,被选中的 item 将被添加到 list,count 为 2。jsp 将再次显示。
问题是,jsp 可以看到列表 shoppingCart 现在不为空。但是计数仍然是0。当我将商品添加到购物篮时,我可以在jsp 上看到shoppingCart 已装满商品,但计数的值始终为0。
实际上,shoppingCart 和 count 对象之间没有任何区别。我不明白它为什么会这样。我首先怀疑count类型是原始int,然后我将其更改为Integer typ,仍然没有解决问题。
【问题讨论】:
标签: spring session spring-mvc controller modelattribute