是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方法。请建议我。提前致谢
(这是我第一次在这里发帖,如果有任何错误,请原谅我)
答案 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。