当前位置: 代码迷 >> java >> Java中的servlet
  详细解决方案

Java中的servlet

热度:89   发布时间:2023-08-02 11:01:47.0

我要显示的是每个产品带有“添加到购物车”按钮的产品列表。 我如何将该按钮与产品相关联?

即,如果我单击以将项目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>
 <td><a href="/yourShopKeeperServlet?productId=${product.id}"> <~-- Your Image Goes here --> </a></td>

它将使GET到servlet。 从那里你可以读

request.getParameter("productId");

将表格放在<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()

我从事过jsp的工作已经很久了,但是我可以给您这个概念并将实现留给您。

  • 在每个tr中,您将有一个表单,表单中的item_id和button的隐藏值为提交操作,另一个隐藏项名为“ add”
  • 每种形式都将提交到您的一个servlet,将其命名为shoppingcart
  • 在servlet中,在处理请求时,您将看到是否有一个名为“ add”的参数。 如果是,那么您将获得名为“ item_id”的参数,并将其添加到购物车。

您将使用产品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
    }
}

我对这些答案的怀疑是,在TR或TD内的每种形式中,都会出现整页的发布请求,这将是最终用户的性能问题。 每次单击“添加到购物车”按钮时,他都必须等待页面加载。 您可以做的是调用ajax函数,并使用ITEM_ID发布URL,这样它就不会引起您全页发布。 要启用购物车条目,需要有一个内联JSP,它将通过Form Post刷新以获取购物车条目的详细信息。

或者,您可以调用JSP函数以在提交请求时将要传递给Session对象的数组中添加项目。 有很多帖子可以让您更好地了解此实现。

  相关解决方案