2012-04-30 4 views
0

Не знаю лучшего названия, но вот что я пытаюсь сделать.Как получить значение от представленной кнопки в JSP?

У меня есть следующая форма, в которой будет отображаться список книг, и после каждой записи книги есть кнопка удаления. Список может быть любой длины. Чтобы получить идентификатор книги, я установил name="remove[${cartItem.bookId}]", но как получить это значение в сервлет? 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, поэтому вы не должны ожидать увидеть то же самое во всех других веб-языках/API. PHP покрывает это отсутствием поддержки чего-то вроде 'getParameterValues ​​()', который соответствует спецификациям HTTP/HTML нескольких входных элементов с тем же именем. – BalusC

ответ

1

Вы должны использовать скрытые параметры:

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

Пусть кнопка отправки будет только таким образом:

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

EDIT: Да, вы должны создать элемент формы для каждая книга:

<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[, и извлеките идентификатор после этого. Вы можете использовать более простое имя, например remove_${cartItem.bookId}
  3. Создайте одну форму для каждого элемента корзины вместо глобальной формы и используйте скрытое поле, чтобы содержать книгу для удаления.

Третий способ, вероятно, самый простой.

Вы также можете использовать JavaScript для инициализации значения скрытого поля при нажатии кнопки, но это не так просто, как выше описанные выше методы, и для этого требуется JavaScript.

Смежные вопросы