我想学习Spring MVC最近。看起来我并没有很好地理解@SessionAttributes和@ModelAttribute注解的功能。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,但问题仍未解决。
我不再在model中添加warenkorb对象。但它有效?有什么不同? (顺便说一句,它不是关于功能..我只是尝试了一些不同的东西学习..当然warenkorb.size作品也 – akcasoy 2013-05-04 10:44:02
你的意思是这样的:warenkorb.add(item)不改变会话中的对象,它只是操纵对象的属性。但是在会话中仍然存在相同的对象,因此我们不需要再次将warenkorb添加到模型中。但count = count + 2正在改变对象的整数计数。所以新的对象必须添加到会话中? – akcasoy 2013-05-04 10:47:50
@Cimbom听起来像你得到它:) – zeroflagL 2013-05-04 11:53:40