【问题标题】:Spring MVC SessionAttributes with ModelAttribute usageSpring MVC SessionAttributes 与 ModelAttribute 用法
【发布时间】: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


    【解决方案1】:

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

    myModelAndView.add("count", count);
    

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

    【讨论】:

    • 我不再在模型中添加 warenkorb 对象。但它有效吗?有什么区别? (顺便说一句,这与功能无关..我只是想学习一些不同的东西..当然 warenkorb.size 也可以)
    • 你的意思是:warenkorb.add(item) 不会改变会话中的对象,它只是操纵对象的一个​​属性。但是在会话中仍然有相同的对象,因此我们不必再次将 warenkorb 添加到模型中。但是 count = count + 2 正在改变对象整数计数。那么新对象一定要添加到会话中吗?
    • @Cimbom 听起来你明白了 :)
    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多