2015-06-16 11 views
5

Io uso jsp + servlet e ho un modulo. Come posso inviare i dati del modulo a un servlet (al metodo doPost()) senza lasciare la pagina effettiva, che contiene il modulo?jsp form invia i dati al servlet senza cambiare pagina

Desidero premere il pulsante "invia", i dati devono essere inviati e desidero rimanere sulla pagina con il modulo. Preferirei non usare javascript.

ho sul http://localhost/myproject/

<form action="http://localhost/myproject/anotherpage" method="POST"> 
First Name: <input type="text" name="first_name"> 
<br /> 
Last Name: <input type="text" name="last_name" /> 
<input type="submit" value="Submit" /> 
</form> 

quando si fa clic sul pulsante di invio vengo trasmesso alla seguente pagina: http://localhost/myproject/anotherpage

ma voglio rimanere in

http://localhost/myproject/ 

edit: in questo momento Ho intenzione di scrivere

request.getRequestDispatcher("/index.jsp").forward(request, response); 

nel metodo doPost()

+0

Ma come si esce dalla pagina effettuando una richiesta POST? –

+0

prova usando ajax. per esempio. jquery.ajax –

risposta

4

Sul servlet, definire il jsp che si desidera restituire.

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/path/to/your/jsp"); 
    requestDispatcher.forward(req, res); 

Se hai intenzione di inviare i dati senza aggiornare la pagina corrente, si potrebbe desiderare di guardare l'invio richiesta AJAX.

-1

È possibile utilizzare javascript e ajax (XMLHttpRequest) oppure specificare un target per il modulo, che fa riferimento a un iframe nascosto.

1

Questo non ti consente di rimanere nella pagina del modulo, ma ti reindirizza immediatamente. E puoi ovviamente usare i valori che hai appena inserito. modulo

JSP

<form method="post" action="yourServlet"> 

Servlet (in doPost())

getServletContext().getRequestDispatcher("/back/to/your.jsp").forward(request, response); 
3

Si dovrebbe avere un modulo con method = "POST" nel vostro JSP

<form method="post"> 
     <input type="number" name="number1" id="number1" /> 
     + 
     <input type="number" name="number2" id="number2" /> 

     <input type="submit" /> 
    </form> 

Quindi nel tuo servlet, nel metodo didoPost, è necessario ottenere i parametri del vostro modulo con getParameter ("nome"), fai quello che vuoi su di esso, quindi inviarlo di nuovo al vostro JSP (setAttribute). Non dimenticare di collegamento con il JSP (ultima riga del mio esempio)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String textNumber1 = request.getParameter("number1"); 
     String textNumber2 = request.getParameter("number2"); 
     int number1 = (!textNumber1.isEmpty() ? Integer.parseInt(textNumber1) : 0); 
     int number2 = (!textNumber2.isEmpty() ? Integer.parseInt(textNumber2) : 0); 
     int result = number1 + number2; 

     request.setAttribute("result", Integer.toString(result)); 

     request.setAttribute("number1", Integer.toString(number1)); 
     request.setAttribute("number2", Integer.toString(number2)); 

     this.getServletContext().getRequestDispatcher("/WEB-INF/calc.jsp").forward(request, response); 
    } 

Infine sul JSP, ottenere l'attributo dal servlet che si desidera visualizzare sulla stessa pagina con getAttribute

<% 
    String number1 = (String) request.getAttribute("number1"); 
    String number2 = (String) request.getAttribute("number2"); 
    String result = (String) request.getAttribute("result"); 

    if (number1 != null && number2 != null && result != null) { 
     out.print(String.format("<p>Result of %s + %s = <strong>%s</strong></p>", number1, number2, result)); 
    } 
%> 

Questo esempio è un po 'calcolatrice che vi mostrerà il risultato di numero1 + numero 2 sulla stessa pagina del modulo;)

4

Ti consiglio di non inoltrare alla pagina iniziale dal secondo, ma di reindirizzare ad esso per seguire lo Post-Redirect-Get pattern.

In caso contrario, l'utente visualizzerà nella barra degli indirizzi l'indirizzo della pagina in cui ha pubblicato i dati e, se fa clic sul pulsante Indietro, riceverà il brutto messaggio di invio di post duplicati.

Così in voi doPost() metodo solo per:

response.sendRedirect("/back/to/your/page"); 

Come in alternativa, si potrebbe nascondere pagina JSP dietro il servlet, e hanno il servlet per direttamente in avanti alla pagina JSP per una richiesta GET e fa il suo lavoro per un POST e poi inoltra al JSP o reindirizza a se stesso. In tal caso, non impostare alcuna azione nel tag <form> in modo che i dati vengano pubblicati nello stesso URL.

Come si manterrebbe lo stesso URL, si potrebbe eventualmente semplicemente fare un forward, ma consiglio comunque un reindirizzamento per evitare il problema del pulsante indietro.

Problemi correlati