当前位置: 首页 > 知识库问答 >
问题:

使用ModelAttribute的Spring MVC SessionAttribute

邓光赫
2023-03-14

最近我正在努力学习SpringMVC。似乎我没有很好地理解@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列出所有的项目。用户点击"addToCart"获取特定商品,该商品将被添加到购物车列表中。我最好先解释一下我对这个控制器的理解,你可以告诉我我没有得到什么。

第一次调用ItemController时,将执行createShoppingCart和createCount方法,返回参数将保存在会话中的名称“shoppingCart”和“count”下。当用户调用url“../addToCart/1”时,将调用addToCart方法。因为我需要会话中的方法签名2值,所以控制器将在会话中查看这些值是否已经存在。是的,他们是。。此时shoppingCart是一个空列表,计数为0。在方法体中,所选项目将添加到列表中,计数为2。jsp将再次显示。

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

实际上,shoppingCart和count对象之间没有任何区别。。我不明白它为什么会这样。我首先怀疑count类型是primitive int,然后我将其更改为Integer类型,但问题仍然没有解决。

共有1个答案

窦国源
2023-03-14

您不需要更改计数(事实上您不能更改),而是分配给它。因此,该模型仍然指向旧值。您必须手动添加新值。

myModelAndView.add("count", count);

但是如果你能使用warenkorb,为什么还要费心于count。大小

 类似资料:
  • 当登录失败时,我试图重定向登录页面上输入的用户名,但在我的控制器中,从“@modelattribute(”user“)”检索的用户的用户名为空。当我不使用spring security时,这是有效的。 我假设form实际上首先发送到spring security,然后重定向到控制器,因此在spring security之间输入的信息丢失。 编辑(解决方案): 谢谢。@James创建一个failur

  • 如果我错了请纠正我。两者都可以用于数据绑定。 谢谢!!

  • 但Spring controller无法填充我的模型。这里是(但我不应该是问题所在,因为正如我所说的,IntelliJ的REST客户端工作良好) 下面是我的控制器的方法:

  • 我正在尝试使用表单更新用户名。问题是,当我使用@modelattribute时,我会得到以下错误: 帐户控制器类: 模型用户类: 负责用户名更改的用户服务方式:

  • 我有一个控制器,我把get和post方法都放在其中。这两种方法都很好,但当我将@ModelAttribute注释引入POST方法时,它开始给我状态400——客户端发送的请求在语法上不正确。 我不知道我做错了什么。视图看起来像: 我尝试将命令名称=“想法”更改为模型属性=“想法”,但没有好处。 Spring控制器看起来像 但是一旦我从submit方法中删除了@ model attribute(" I

  • 问题内容: Spring MVC 的目的和用途是什么? 问题答案: 引用模型对象的属性(MVC中的M;),所以我们假设有一个表单,该表单带有一个称为“ Person”的表单支持对象。然后,你可以让Spring MVC通过使用批注将此对象提供给Controller方法: 另一方面,注释用于定义应作为模型一部分的对象。因此,如果要在模型中引用Person对象,可以使用以下方法: 这个带注释的方法将允许