gpt4 book ai didi

Spring MVC SessionAttributes 与 ModelAttribute 用法

转载 作者:行者123 更新时间:2023-12-01 05:21:30 26 4
gpt4 key购买 nike

我最近正在尝试学习 Spring MVC。似乎我不太了解@SessionAttributes 和@ModelAttribute 注释的功能。

这是我的 Controller 的一部分:

@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”,该商品将被添加到购物车列表中。我最好先解释一下我对这个 Controller 的理解,你可以告诉我我没有得到什么。

第一次调用 ItemController 时,将执行 createShoppingCart 和 createCount 方法,返回参数将保存在 session 中,名称为“shoppingCart”和“count”。当用户调用 url ".../addToCart/1"时,将调用 addToCart 方法。由于我在方法签名中需要 session 中的 2 个值,因此 Controller 将在 session 中查看这些值是否已经存在。是的。。此时shoppingCart是一个空的list,count为0。在方法体中,被选中的item会被加入list,count为2,jsp会再次显示出来。

问题是,jsp 可以看到列表shoppingCart 现在不为空了。但计数仍然为0。当我将商品添加到购物篮时,我可以在jsp上看到shoppingCart中装满了商品,但计数的值始终为0。

实际上,shoppingCart 和 count 对象之间没有任何区别。我不明白为什么它会这样。一开始怀疑count类型是原始int,后来改成Integer typ,问题还是没有解决。

最佳答案

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

myModelAndView.add("count", count);

但是为什么要打扰 count如果您可以使用 warenkorb.size反正?

关于Spring MVC SessionAttributes 与 ModelAttribute 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16373109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com