我最近正在尝试学习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”获取特定项目,此项目将被添加到shoppingCart列表中。我最好先解释一下我对这个控制器的理解,你可以告诉我我没有得到的东西。
第一次调用ItemController时,将执行createShoppingCart和createCount方法,返回参数将以名称“shoppingCart”和“count”保存在会话中。当用户调用url“... / addToCart / 1”时,将调用addToCart方法。由于我需要来自会话的方法签名2值,控制器将在会话中查看值是否已存在。是的,它们是..此时shoppingCart是一个空列表,count为0.在方法体中,所选项目将被添加到列表中,count将为2.将再次显示jsp。
问题是,jsp可以看到shoppingCart列表现在不是空的。但是计数仍为0.当我将项目添加到购物篮时,我可以在jsp上看到shoppingCart已经填充了项目,但count的值始终为0.
实际上shoppingCart和count对象之间没有任何区别..我不明白它为什么会这样。我首先怀疑计数类型是原始int,然后我将其改为Integer typ,但问题仍未解决。
答案 0 :(得分:1)
您没有更改 count
(实际上您不能),您已分配给它。所以模型仍然指向旧的价值。您必须手动添加新值。
myModelAndView.add("count", count);
但是如果你能使用count
,为什么还要为warenkorb.size
而烦恼?