2012-04-30 46 views
0

不知道更好的標題,但這是我即將做的事情。如何從JSP中的提交按鈕獲取值?

我有以下的形式,其中將顯示一個書單,每本書入境後有一個刪除按鈕。該列表可以是任何長度。爲了獲得書號,我設置了name="remove[${cartItem.bookId}]",但是如何在servlet中獲取此值? request.getParameter("remove")request.getParameterValues("remove")每次都返回null。

<form method="post" action="removeBookFromCart"> 
<c:forEach var="cartItem" items="${sessionScope.cart.cartItems}"> 
     <tr> 
      <td><c:out value="${cartItem.title}" /></td> 
      <td><input type="submit" name="remove[${cartItem.bookId}]" value="Remove"/></td> 
     </tr> 
    </c:forEach> 
    </form> 
+0

您在那裏的語法僅適用於PHP。 PHP具有額外的功能,它可以自動將以'[]'結尾的請求參數名稱轉換爲'$ _REQUEST'上的數組。此功能不是HTTP或HTML的一部分,因此您不應該期望在所有其他基於Web的語言/ API中看到相同的功能。由於缺乏對'getParameterValues()'的支持,PHP符合多個輸入元素具有相同名稱的HTTP/HTML規範。 – BalusC

回答

1

你必須使用隱藏的參數:

<input type="hidden" name="remove" value="${cartItem.bookId}"/> 

讓提交按鈕只是這樣:

<input type="submit" value="Remove"/> 

編輯: 是的,你必須創建一個表單元素每本書:

<c:forEach var="cartItem" items="${sessionScope.cart.cartItems}">   
     <tr> 
      <td><c:out value="${cartItem.title}" /></td> 
      <td> 
      <form method="post" action="removeBookFromCart"> 
      <input type="submit" value="Remove"/> 
      <input type="hidden" name="remove" value="${cartItem.bookId}"/> 
      </form> 
      </td> 
     </tr>  
    </c:forEach> 
+0

只有只有一個條目時,這不是唯一的工作嗎?我將有多個條目與相應的刪除按鈕。 – Jonathan

+0

我編輯了我的第一個答案 –

+0

如果這樣可以解決您的問題,您是否可以將答案標記爲已接受? –

2

有幾種解決方案:

  1. 使用<button name="bookToRemove" value="${cartItem.bookId}" type="submit">Remove</button>。但是,這不符合IE6和IE7(至少)的規定。
  2. 迭代通過參數,發現其與remove[啓動一個,之後提取的ID。你可以使用一個簡單的名稱,如remove_${cartItem.bookId}
  3. 創建每車項目一種形式,而不是一個全球性的形式,並使用隱藏字段包含書刪除。

第三種方式可能是最簡單的一個。

你也可以使用一些JavaScript來初始化一個按鈕被點擊時,一個隱藏字段的值,但是這並不比上述方法更簡單,並且需要JavaScript。