4

我最近正在尝试学习 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,仍然没有解决问题。

4

1 回答 1

1

你没有改变 count(事实上你不能),你分配给它。所以模型仍然指向旧值。您必须手动添加新值。

myModelAndView.add("count", count);

但是为什么要打扰count但是,如果您仍然可以使用warenkorb.size呢?

于 2013-05-04T10:34:56.177 回答