当前位置: 首页 > 面试题库 >

在Spring MVC中,ModelAttribute在控制器中返回空值

逄俊力
2023-03-14
问题内容

好了,该寻求帮助了。我正在向我的jsp发送一个(购物)购物车ModelAttribute,允许用户编辑数量,当Model为POST到控制器时,除可编辑(数量)字段外,这些字段为null。我已经针对类似的问题进行了数天的研究,但没有匹配的结果。我正在使用Spring
3.1。

这是我在GET和POST上的控制器:

@Controller
public class CartController {

      @Autowired
      private Cart cart;

      @RequestMapping(value = "/cart", method = RequestMethod.GET)  
      public String showCart(Model model) {
         logger.debug("CartController.showCart() Cart: {}", this.cart);
         model.addAttribute(cart);
         return "cart/cart";
      }

和开机自检

   @RequestMapping(value = "/cart", method = RequestMethod.POST, params = "update")
   public String update(@ModelAttribute("cart") Cart cart, BindingResult result, Model model) {
      logger.debug("CartController.update() Cart: {}", cart); 
      return "cart/cart";
   }

我的jsp:

<div class="container MainContent">
   <form:form method="POST" modelAttribute="cart">
      <fieldset>
         <legend>Cart</legend>
         <table class="table">
            <thead>
               <tr>
                  <th>Product Name</th>
                  <th>Quantity</th>
                  <th>Product Price</th>
               </tr>
            </thead>
            <tbody>
               <c:forEach items="${cart.cartDetails}" var="cartDetail" varStatus="status">
                  <tr>
                     <td>${cartDetail.product.name}</td>                     
                     <td><form:input path="cartDetails[${status.index}].quantity" size="1" /></td>                     
                     <td>${cartDetail.price}</td>
               </c:forEach>
               <tr>
                  <b><td colspan="2" align="right"><spring:message code="order.total" /></b>
                  </td>
                  <td>${cart.totalCartPrice}</td>
               </tr>
            </tbody>
         </table>
      </fieldset>
      <div></div>
      <button id="order" name="order">
         <spring:message code="button.order" />
      </button>
      <button id="update" name="update">
         <spring:message code="button.update" />
      </button>
   </form:form>
</div>

以及GET之前的cart的日志结果:

CartController.showCart()购物车:购物车[cartDetails =
[CartDetail产品=com.Product@c26440 [名称=我的名字],数量= 1]],总计CartPrice = 10.00]

然后将jsp中的数量从1更新为3,然后将其发布到控制器:

CartController.update()购物车:购物车[cartDetails = [CartDetail [产品= null,数量=
3]],totalCartPrice = null]

我已经在这里和Spring论坛上阅读了几篇类似的文章,并尝试了不同的建议解决方案,但都没有碰到运气。看来我编辑的数量结果正确地绑定到对象,但是为什么其他不呢?


问题答案:

假设您在Form对象中具有所有必需的字段;

您必须指定表单字段,并用数据填充值。

<td>${cartDetail.product.name}</td>

只会将结果打印到屏幕上。如果要将其绑定到表单,则必须将其放入spring表单输入中,例如:

<form:input path="productName"  value="${cartDetail.product.name}"/>

如果您不希望它是可编辑的,则可以将其放入隐藏字段中,但最后必须将其放入jsp的form元素中,并在表单POJO中包含一个对应的字段



 类似资料:
  • 我正在使用Spring形式。我只需要得到Staemap作为响应,但我得到的是整个jsp页面作为响应。

  • 为什么我不能在这里回复一个糟糕的请求?在其他例子中,它工作得很好。

  • 问题内容: 我的代码中有一个ajax调用。我想通过通话实现的效果很好。我想从数据库中删除一些记录,当通过ajax调用该方法时,该记录实际上被删除了,但是就像在symfony方法中,它必须返回一个响应,这就是为什么当执行该方法时会给我错误 我的Ajax电话是 而执行的方法是 我如何从该方法成功返回?有任何想法吗?谢谢 问题答案: 替换为。也不要忘记在顶部写。

  • 我有以下控制器: 当响应为HttpStatus时。好的,我可以读取客户端中的字符串响应: 但是当我返回Httpstatus时。BAD_REQUEST响应总是空的: 即使e.getMessage()具有消息的有效字符串。 这是我用于使用此服务的代码:

  • 本文向大家介绍详解利用SpringMVC拦截器控制Controller返回值,包括了详解利用SpringMVC拦截器控制Controller返回值的使用技巧和注意事项,需要的朋友参考一下 背景:需求是在Controller中方法没有实现时,返回模拟结果。主要用于项目初期前台跟后台的交互,Web项目就是在前台发出请求然后后台响应并返回结果。本示例利用拦截器和注解实现跳过执行方法直接返回定义结构的功能

  • 问题内容: 我在SpringMVC项目中将新的Java API(JSR 353)用于JSON。 这个想法是生成一些Json数据并将其返回给客户端。我所拥有的控制器看起来像这样: 当我访问它时,我没有得到JSON的预期表示,而是得到了这些: 为什么是这样?到底是怎么回事?以及如何使其正确返回预期的JSON? 问题答案: 当您意识到新的JSR 353 API 没有特殊要求时,答案很简单。相反,在这种情

  • 我想使用@SessionAttributes注释在SpringMVC中的两个控制器之间共享会话属性。 下面是我用来测试属性共享的一个简单代码:AController。JAVA a.jsp BController.java b.jsp 我期望的行为是转到 /aURL,myParam将被设置为0到99之间的随机值,然后该值将在两个控制器之间共享。 但是,会发生以下情况:我转到/a URL,myPara

  • 问题内容: 我昨天在JavaFX中构建了一个小应用程序。我想在Controller类中获取应用程序的场景。每次尝试在控制器类中获取场景时,都会出错。我可以在Controller类的Button上设置OnKeyPressed方法,效果很好。但是,只有在选择Button后,它才能正常工作。我只能在Main类方法replaceSceneContent中获得场景。我已经读过这个问题,但是我在initial