如何将输入值作为 link 的请求参数发送到 servlet?
How to send input value as request parameter of a link to a servlet?
我有一个 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 因此我可以在 servlet 中使用它。
我有一个 HTML 文本供用户输入数量。我的问题是我如何将它作为参数发送给 servlet,因为请求对象没有检索数量参数(我猜这是因为它不在指向特定 servlet (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> > Add book</a>
我认为你过于复杂了。在这里忘记 <c:param>
。
对于<form>
,你应该定义action="YourServletName"
和method="GET"
或method="POST"
,然后在servlet的doGet()
或doPost()
你可以这样读取参数:
String quantity = request.getParameter("quantity");
当然你会把它转换成某种数字类型。
以前从未见过这样的方法:为什么表单没有操作、方法和提交按钮?
如果您按照预期的方式使用它应该没问题。
您可以使用从数据库中检索到的值预填充表单并将数量输入字段留空,然后像往常一样检索数量属性
<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>
现在,如果你想阻止用户编辑数量以外的输入字段,我认为这是你想要实现的,你可以添加 readonly
HTML 属性(或设置如果出于某种原因您不希望向用户显示该字段,则将输入类型隐藏)
<td>Book name: <input type="text" name = "bname" value="${book.bookName}" readonly="readonly"> </input></td>
然后在 "/AddBookServlet"
的 doPost 方法中,您应该能够检索调用 request.getParameter("nameOfParameter")
的每个字段
我有一个 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 因此我可以在 servlet 中使用它。
我有一个 HTML 文本供用户输入数量。我的问题是我如何将它作为参数发送给 servlet,因为请求对象没有检索数量参数(我猜这是因为它不在指向特定 servlet (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> > Add book</a>
我认为你过于复杂了。在这里忘记 <c:param>
。
对于<form>
,你应该定义action="YourServletName"
和method="GET"
或method="POST"
,然后在servlet的doGet()
或doPost()
你可以这样读取参数:
String quantity = request.getParameter("quantity");
当然你会把它转换成某种数字类型。
以前从未见过这样的方法:为什么表单没有操作、方法和提交按钮?
如果您按照预期的方式使用它应该没问题。
您可以使用从数据库中检索到的值预填充表单并将数量输入字段留空,然后像往常一样检索数量属性
<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>
现在,如果你想阻止用户编辑数量以外的输入字段,我认为这是你想要实现的,你可以添加 readonly
HTML 属性(或设置如果出于某种原因您不希望向用户显示该字段,则将输入类型隐藏)
<td>Book name: <input type="text" name = "bname" value="${book.bookName}" readonly="readonly"> </input></td>
然后在 "/AddBookServlet"
的 doPost 方法中,您应该能够检索调用 request.getParameter("nameOfParameter")