2015-06-16 16 views
5

Używam jsp + servlets i mam formularz. Jak wysłać dane formularza do serwletu (do metody doPost()) bez opuszczania rzeczywistej strony zawierającej formularz?jsp formularz wyślij dane do serwletu bez zmiany strony

Chcę nacisnąć przycisk "wyślij", dane powinny zostać wysłane i chcę pozostać na stronie z formularzem. Wolałbym nie używać javascript.

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

po kliknięciu w przycisk i uzyskać przekazany do następnej stronie: http://localhost/myproject/anotherpage

ale chcę pozostać na

http://localhost/myproject/ 

EDIT: teraz Zamierzam napisać:

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

w metodzie doPost()

+0

Ale w jaki sposób opuszczasz stronę, wysyłając żądanie POST? –

+0

spróbuj użyć ajax. na przykład jquery.ajax –

Odpowiedz

4

W swoim aplecie zdefiniuj jsp, który chcesz zwrócić.

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

Jeśli chcesz wysłać dane bez odświeżania bieżącej strony, możesz rzucić okiem na zapytanie ajax.

-1

Można używać javascript i ajax (XMLHttpRequest) lub określić cel do formularza, który odwołuje się do ukrytego elementu iframe.

1

To nie pozwala ci pozostać na stronie formularza, ale od razu odsyła cię z powrotem do niego. Możesz oczywiście użyć wartości, które właśnie wprowadziłeś. Formularz

JSP

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

Servlet (w doPost())

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

powinny mieć formę z method = "post" w JSP

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

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

Następnie w swoim serwlety, w doPost metody, trzeba uzyskać parametry formularza z getParameter („nazwa”), rób co chcesz na nim, a następnie ponownie wysłać go do JSP (setAttribute). Nie zapomnij linku z JSP (ostatnia linia moim przykładzie)

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); 
    } 

Wreszcie na JSP, uzyskać atrybut z Twojego serwletu chcesz wyświetlić na tej samej stronie z 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)); 
    } 
%> 

Ten przykład jest trochę kalkulatora, które pokazują wynik number1 + numer 2 na tej samej stronie formularza;)

4

Zaleca się, aby nie przekazywać strony początkowej z drugiej strony, ale zamiast tego należy przekierować na nią, aby śledzić numer Post-Redirect-Get pattern.

Jeśli tego nie zrobisz, użytkownik zobaczy w pasku adresu URL adres strony, na której umieścił dane, a jeśli kliknie przycisk Wstecz, otrzyma brzydką wiadomość o duplikatach przesłanych pocztą.

Więc ty doPost() metoda po prostu:

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

jak alternatywa, można ukryj strona JSP za serwletu i mieć aplet bezpośrednio do przodu do strony JSP dla żądania GET i wykonać pracę dla POST, a nastę pnie przekierowanie do strony JSP lub przekierowanie do siebie. W takim przypadku użytkownik nie ustawiłby żadnej akcji w tagu <form>, aby opublikować dane w tym samym adresie URL.

Ponieważ zachowałby ten sam adres URL, mógłbyś w końcu zrobić dalej, ale nadal zalecam przekierowanie, aby uniknąć problemu z przyciskiem Wstecz.

Powiązane problemy