问题描述
我要显示的是每个产品带有“添加到购物车”按钮的产品列表。 我如何将该按钮与产品相关联?
即,如果我单击以将项目A添加到购物车,我将如何在按钮中进行指定,以调用ShoppingCart类,从中添加项目。
我已经有一个servlet,用于将所有产品填充到ArrayList中,并将其转发到JSP页面。
<form action="products" method="get">
<table border=1>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.id}</td>
<td>${product.description}</td>
<td>${product.unitPrice}</td>
<td><input type="button" value="Add to cart" onlick="????"/></td>
</tr>
</c:forEach>
</table>
</form>
1楼
<td><a href="/yourShopKeeperServlet?productId=${product.id}"> <~-- Your Image Goes here --> </a></td>
它将使GET到servlet。 从那里你可以读
request.getParameter("productId");
2楼
将表格放在<td>
而不是表格周围。
使用<inupt type="submit">
可使按钮真正起作用,而不需要JavaScript hack,而在禁用JS的webbrowsers上反而会失败。
在表单中包含<input type="hidden">
,以传递产品ID。
总结:
<table border=1>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.id}</td>
<td>${product.description}</td>
<td>${product.unitPrice}</td>
<td>
<form action="products" method="get">
<input type="hidden" name="id" value="${product.id}" />
<input type="submit" value="Add to cart"/>
</form>
</td>
</tr>
</c:forEach>
</table>
这样,它将在侦听/products
的servlet的doGet()
方法中可用。
String id = request.getParameter("id");
// ...
与具体问题无关 ,您想为此使用POST而不是GET。
否则,当用户将其标记为结果页面并稍后打开时,或者当他/他只是单击/关注另一个(潜在的恶意)人在电子邮件/ IM中传递的链接时,用户将能够在其购物篮中添加其他产品。 / site / etc。
将method="get"
替换为method="post"
并将doGet()
逻辑移动到doPost()
。
3楼
我从事过jsp的工作已经很久了,但是我可以给您这个概念并将实现留给您。
- 在每个tr中,您将有一个表单,表单中的item_id和button的隐藏值为提交操作,另一个隐藏项名为“ add”
- 每种形式都将提交到您的一个servlet,将其命名为shoppingcart
- 在servlet中,在处理请求时,您将看到是否有一个名为“ add”的参数。 如果是,那么您将获得名为“ item_id”的参数,并将其添加到购物车。
4楼
您将使用产品ID调用函数:
<td><input type="button" value="Add to cart" onlick="addToCart("+${product.id}+");"/></td>
然后一个ajax调用
function addToCart (id) {
$.post("/cart", {prodId: id}, callback};
}
servlet就像
public class CartServlet extends HttpServlet {
public void doPost (HttpServletRequest req, HttpServletResponse resp) throws IOException {
String prodId= req.getParameter("prodId");
// continue with the purchasing code
}
}
5楼
我对这些答案的怀疑是,在TR或TD内的每种形式中,都会出现整页的发布请求,这将是最终用户的性能问题。 每次单击“添加到购物车”按钮时,他都必须等待页面加载。 您可以做的是调用ajax函数,并使用ITEM_ID发布URL,这样它就不会引起您全页发布。 要启用购物车条目,需要有一个内联JSP,它将通过Form Post刷新以获取购物车条目的详细信息。
或者,您可以调用JSP函数以在提交请求时将要传递给Session对象的数组中添加项目。 有很多帖子可以让您更好地了解此实现。