2016-04-21 6 views
1

Ich habe eine JSP-Seite, die Inhalte aus der Datenbank lädt, je nachdem, was der Benutzer sehen muss (Laden von Buchinformationen). Aber ich muss auch den Benutzer eingeben, um die Menge auf der gleichen JSP-Seite einzugeben.Wie Eingabewert als Anforderungsparameter einer Verbindung zu einem Servlet senden?

Ich verwendete JSTL-Tags, um Informationen aus der Datenbank abzurufen und sie mit dem folgenden Code anzuzeigen.

<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> 

Diese Information wird auf c: param gesetzt, damit ich sie im Servlet verwenden kann.

Ich habe einen HTML-Text für den Benutzer, um die Menge einzugeben. Meine Frage ist, wie kann ich dies als ein Parameter an das Servlet senden, da das Anfrageobjekt den Mengenparameter nicht abruft (ich vermute, das liegt daran, dass es sich nicht in einem Formular befindet, das auf das spezifische Servlet (AddBookServlet) verweist.)

Mein Code

<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> 

Antwort

2

Noch nie einen solchen Ansatz vorher gesehen: Warum ein Formular ohne eine Aktion, Methode und Schaltfläche senden?

Wenn Sie es so verwenden, wie es beabsichtigt ist, sollten Sie in Ordnung sein.

Sie können das Formular mit Werten aus der Datenbank abgerufen vorab füllen und die Menge Eingabefeld leer lassen, rufen Sie dann die Menge Attribut, wie Sie normalerweise

<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> 

jetzt tun würde, wenn Sie den Benutzer verhindern möchten, Von der Bearbeitung der Eingabefelder abgesehen von der Menge, die ich denke, was Sie erreichen wollten, können Sie das HTML-Attribut readonly hinzufügen (oder den Eingabetyp auf Versteckt setzen, wenn Sie aus irgendeinem Grund nicht möchten, dass das Feld dem Benutzer angezeigt wird))

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

Dann in der DoPost-Methode der "/AddBookServlet" sollten Sie in der Lage sein, jedes Feld aufrufen request.getParameter("nameOfParameter")

+0

Warum würde der Buchname ein Eingabefeld sein? Einfach ausdrucken und die ID in einem versteckten Feld übergeben. – Peter

+1

@Peter Ich stimme dir zu, aber ich hatte den Eindruck, dass er versuchte, jedes Feld an das Servlet als Parameter übergeben, vielleicht nicht, sie wieder aus der db –

+1

abrufen Ich denke, er muss, wenn er fortfahren will arbeite mit einem Buchobjekt, aber ich verstehe jetzt. Bonus-Score für das Readonly-Attribut - deaktiviertes Feld wird nicht gesendet. :) – Peter

0

Du es zu verkomplizieren, denke ich. hier über <c:param> Forget.

Für die <form>, sollten Sie definieren action="YourServletName" und method="GET" oder method="POST", dann in der Servlets doGet() oder doPost() Sie den Parameter wie folgt lesen:

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

Dann natürlich es zu einer Art Sie von numerischen Typ umgewandelt werden.