2016-04-21 2 views
1

У меня есть страница jsp, которая загружает контент из базы данных в соответствии с тем, что пользователь должен видеть (загрузка информации о книге). Но мне также нужно, чтобы пользователь вводил, чтобы ввести количество на той же странице jsp.Как отправить входное значение в качестве параметра запроса ссылки на сервлет?

Я использовал теги JSTL для извлечения информации из базы данных и отображения ее с помощью следующего кода.

<c:forEach var="book" items="${listBooks.rows}"> 
    <tr> 
     <td><c:out value="${book.bookID}"/></td> 
     <td><c:out value="${book.bookName}" /></td> 
     <td><c:out value="${book.bookType}" /></td> 
     <td><c:out value="${book.Price}" /></td> 

Эта информация установлена ​​в c: param, поэтому я могу использовать ее в сервлете.

У меня есть текст HTML, чтобы пользователь мог ввести количество. Мой вопрос заключается в том, как я могу отправить это как параметр сервлета, поскольку объект запроса не получает параметр количества (я предполагаю, что это не потому, что оно не находится внутри формы, которая направляется на определенный сервлет (AddBookServlet).

Мой код

<form> 
<td>Quantity: <input type="text" name="quantity" value="" style="height:30px; width: 45px"/> 

</td> 
</form> 
<td><a style="color: blue;" class="myButton1" 
     href=<c:url value="/AddBookServlet"> 

     <c:param name="id" value="${book.bookID}"/> 
     <c:param name="name" value="${book.bookName}"/> 
     <c:param name="type" value="${book.type}"/> 
     <c:param name="amount" value="${book.price}"/> 

     <c:param name="seat" value="${param.quantity}" /><%-- not sure if this is the way to do it--%> 

</c:url> > &nbsp;&nbsp;&nbsp; Add book</a> 

ответ

2

Никогда не видел такого подхода раньше: зачем нужна форма без действия, метод и кнопка отправки?

Если вы используете его так, как он предназначен для использования, все должно быть в порядке.

Вы можете предварительно заполнить форму со значениями, полученными из базы данных и оставьте поле ввода количества пустым, а затем получить атрибут количество, как вы обычно делаете

<c:forEach var="book" items="${listBooks.rows}"> 
    <form action = "/AddBookServlet" method = "post"> 

     <td>Book name: <input type="text" name = "bname" value="${book.bookName}"/></td> 
     <!-- put the rest of the fields here !--> 

     <td>Quantity: <input type="text" name="quantity" value="" style="height:30px; width: 45px"/></td> 

     <input type="submit" value="Add Book"/> 

    </form> 
</c:forEach> 

Теперь, если вы хотите, чтобы пользователь от редактирования полей ввода, кроме количества, которое, как я думаю, вы пытаетесь достичь, вы можете добавить атрибут HTML readonly (или указать тип ввода скрытым, если по какой-то причине вы не хотите, чтобы поле отображалось пользователю)

<td>Book name: <input type="text" name = "bname" value="${book.bookName}" readonly="readonly"> </input></td> 

Затем в методе doPost "/AddBookServlet" вы сможете получить каждое поле, вызывающее request.getParameter("nameOfParameter")

+0

Почему имя книги будет полем ввода? Просто распечатайте его и передайте его ID в скрытом поле. – Peter

+1

@Peter Я согласен с тобой, но у меня создалось впечатление, что он пытался передать каждое поле сервлету в качестве параметров, возможно, не получить их снова из db –

+1

Думаю, ему придется, если он захочет продолжить работайте с книжным объектом, но сейчас я понимаю. Бонусная оценка для атрибута readonly - отключенное поле не получает. :) – Peter

0

вы чрезмерно усложнять ее, я думаю. Забудьте о <c:param> здесь.

Для <form>, вы должны определить action="YourServletName" и method="GET" или method="POST", то в сервлета doGet() или doPost() вы можете прочитать параметр, как это:

String quantity = request.getParameter("quantity"); 

Тогда, конечно, вы приводите его к какой-то числовой тип.

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