将对象数据从JSP传递给Spring Controller Post Method而不是GET方法

时间:2014-11-19 06:51:49

标签: java spring jsp spring-mvc

是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方法。请建议我。提前致谢

(这是我第一次在这里发帖,如果有任何错误,请原谅我)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您已添加到购物车按钮,因此在点击它时您可以进行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");
    }
  });

}

答案 2 :(得分:1)

将所有内容放在表单中(使用Spring的<form:form>标记)。这会将表单POST到显示它的同一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。