【问题标题】:Passing an object data from JSP to Spring Controller Post Method instead of GET method将对象数据从 JSP 传递到 Spring Controller Post 方法而不是 GET 方法
【发布时间】:2014-11-19 06:51:48
【问题描述】:

我是 Spring Web MVC 和开发 Web 应用程序的新手。 在某些情况下,我需要将数据值传递给 Controller。 (注意:这里的数据值是bean对象的值)

Item Number  Item Name  Description  Price

 Item1018     Item1      Desc1        5.0      Add item to Cart  
 Item1019     Item2      Desc2        2.0      Add item to Cart  

如上图所示,如果我点击“将商品添加到购物车”,相应的商品编号应传递给控制器​​。

viewmenu.jsp

<c:forEach items="${model.itemlists}" var="item">
<tr>
   <c:if test = "${item.status == 'available'}">   
    <td><c:out value="${item.itemNo}"/>  </td>
    <td><c:out value="${item.itemName}"/></td>
    <td><c:out value="${item.description}"/></td>
    <td><c:out value="${item.price}"/></td>
    <td><a href="<c:url value="additemtocart">
             <c:param name='itemNumber' value="${item.itemNo}"/>
         </c:url>">Add item to Cart</a> </td>
    </c:if>
</tr>
</c:forEach>

CustomerController.java 方法

@RequestMapping(value = "additemtocart",method = RequestMethod.GET)
     public ModelAndView addItemToCart(@RequestParam("itemNumber") String itemno  ) throws ClassNotFoundException, SQLException {
                   System.out.println("Username test in customer controller: "+userName);

 }

代码有效并且能够传递值。但是根据 GET 和 POST 方法的标准(描述为 here ),我认为我做错了。请建议是否有任何其他方法可以将数据传递给 POST 方法。请给我建议。提前致谢

(第一次发帖,如有错误请见谅)

【问题讨论】:

    标签: java spring jsp spring-mvc


    【解决方案1】:

    将所有内容放入表单中(使用 Spring 的 &lt;form:form&gt; 标签)。这会将表单发布到显示它的相同 URL。如果要 POST 到不同的 URL,请设置表单的 action 属性。

    将您的 Add item to Cart 链接更改为提交按钮,因为您不应使用 GET 更改数据。您可以根据需要设置样式,并根据需要使其看起来像一个链接。

    您的按钮应如下所示:

    <button type=submit name=itemNumber value=xxx>Add item to Cart</button>
    

    在您的控制器中,您应该有一个带有如下请求映射的处理程序方法:

    @RequestMapping(value="additemtocart", method=RequestMethod.POST, params={"itemNumber"})
    

    然后,您应该使用 Post-Redirect-Get 模式重定向回产品列表。请参阅 Spring MVC 文档中的 flashAttributes。

    【讨论】:

    • 您要我将整个链接更改为按钮吗?以及如何在单击提交按钮时调用具有值“additemtocart”的处理程序方法。你也可以指定那个吗?
    • 编辑了我的答案。确保一切都以一种形式进行。这将在与页面显示相同的 URL 处向服务器发出 POST 请求。您可以将表单的 action 属性更改为不同的 URL。
    【解决方案2】:

    是的,您是正确的,您应该使用 POST 请求在服务器上执行任何类型的 DML 操作。 GET 应该仅用于数据获取操作。原因是为了避免双重表单提交,您可以使用 F5 或双击提交按钮。您应该使用 method=RequestMethod.POST 而不是 GET。见Spring MVC Post Request

    【讨论】:

      【解决方案3】:

      您已添加到购物车按钮,因此单击它可以进行 Ajax 调用并在控制器中使用适当的请求映射。

      <a href="javascript:addItemToCart(${item.itemNo},"passURL");">Add to cart item?</a>
      

      在 Javascript 中,您可以传递参数并为 ajax 请求提供 POST 类型。

      JavaScript 代码

      function addItemToCard(itemNo,targetURL){
      
        $.ajax(function(){
          url:targetURL,
          type:"POST",
          data:"itemNumber":itemNo,
          success:function(response){
             alert("Added successfully");
          }
        });
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多