【问题标题】:How to send input value as request parameter of a link to a servlet?如何将输入值作为链接的请求参数发送到 servlet?
【发布时间】:2016-04-21 02:54:13
【问题描述】:

我有一个 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> > &nbsp;&nbsp;&nbsp; Add book</a> 

【问题讨论】:

    标签: jsp jstl el


    【解决方案1】:

    以前从未见过这样的方法:为什么有一个没有操作、方法和提交按钮的表单?

    如果你按照预期的方式使用它应该没问题。

    您可以使用从数据库中检索到的值预先填充表单并将数量输入字段留空,然后像往常一样检索数量属性

    <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") 的每个字段

    【讨论】:

    • 为什么书名是输入字段?只需将其打印出来并在隐藏字段中传递其 ID。
    • @Peter 我同意你的看法,但我的印象是他试图将每个字段作为参数传递给 servlet,也许不会再次从数据库中检索它们
    • 如果他想继续使用书籍对象,我想他将不得不这样做,但我现在明白了。只读属性的奖励分数 - 禁用字段未提交。 :)
    【解决方案2】:

    我认为你过于复杂了。忘记这里的&lt;c:param&gt;

    对于&lt;form&gt;,你应该定义action="YourServletName"method="GET"method="POST",然后在servlet的doGet()doPost()中你可以这样读取参数:

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

    那么你当然会把它转换成某种数字类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2020-03-11
      • 2020-04-25
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多