2011-03-29 100 views
0

我想要的是顯示每個產品的「添加到購物車」按鈕的產品列表。我如何將該按鈕與產品相關聯?Java中的servlets

即如果我點擊將項目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> 

回答

2

將表單放入<td>,而不是圍着桌子。使用<inupt type="submit">可以讓按鈕真的可以在不需要JavaScript黑客的情況下正常運行,而這些黑客無論如何都會在禁用了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> 

這樣,這將是可作爲在servlet監聽/productsdoGet()方法如下。

String id = request.getParameter("id"); 
// ... 

無關的具體問題,你想使用POST這不是GET的。否則,用戶將能夠在他/她書籤結果頁並稍後將其打開時,或者當他/她只是點擊/跟隨由電子郵件中的另一個(潛在的惡意)人傳遞的鏈接時,將其他產品添加到他的籃子中/ IM /網站/等。將method="get"替換爲method="post",並將doGet()中的邏輯移至doPost()

+0

理想情況下,你會使用一個POST而不是爲這一個GET,但這是熱尖。 – 2011-03-29 17:45:05

+0

@威爾:公平點,更新答案。 – BalusC 2011-03-29 17:49:52

1

已經年齡達到我曾在jsp的工作,但我可以給你的概念,離開實施給你。

    每個 TR
  • 你將有一個表格,在表格的ITEM_ID隱藏的價值和按鈕提交行動,並命名爲另一個隱伏項目「添加」
  • 每個表單將提交給你的一個servlet,讓它命名爲shoppingcart
  • 在servlet中,在處理請求時,你會看到是否有一個名爲「add」的參數。如果是,那麼你會得到名爲「item_id」的參數,並將該項目添加到購物車。
2
<td><a href="/yourShopKeeperServlet?productId=${product.id}"> <~-- Your Image Goes here --> </a></td> 

它將使GET與Servlet。並從那裏你可以閱讀

request.getParameter("productId"); 
1

你會使用產品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 
    } 
} 
0

我對這些答案的懷疑是,在TR或TD內的每個表格中都會有完整的頁面發佈請求,這將是最終用戶的性能問題。每次點擊添加到購物車按鈕時,他都必須等待頁面加載。你可以做的就是調用一個ajax函數,並用ITEM_ID發佈URL,這樣它就不會導致你完整發布頁面。要啓用購物車條目,可以使用內嵌的JSP,使用Form Post進行刷新,以獲取購物車條目的詳細信息。

或者您可以調用JSP函數在提交請求時添加要傳遞Session對象的Array中的Items。有很多帖子是爲了讓你更好地理解這個實現。

onClick function call using scriptlet