2015-06-16 62 views
5

我使用jsp + servlets並且有一個表單。如何在不離開包含表單的實際頁面的情況下將表單數據發送到servlet(到doPost()方法)?jsp表單發送數據到servlet而不改變頁面

我想按下「提交」按鈕,數據應該發送,我想仍然留在頁面上的形式。我寧願不使用JavaScript。

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

點擊提交按鈕我被轉發到以下頁面時:http://localhost/myproject/anotherpage

但我想留在

http://localhost/myproject/ 

編輯:現在我要寫

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

在doPost()方法中

+0

但是,您如何通過發出POST請求離開頁面? –

+0

嘗試使用ajax。例如jquery.ajax –

回答

4

在你的servlet上,定義你想要返回的jsp。

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

如果您的意思是發送數據而不刷新當前頁面,則可能需要查看發送ajax請求。

-1

您可以使用javascript和ajax(XMLHttpRequest),或者爲表單指定一個引用隱藏iframe的目標。

1

這不會讓您停留在表單頁面上,而是會立即將您重新導向到表單頁面。你當然可以使用你剛輸入的值。

JSP形式

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

的Servlet(在doPost()

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

你應該在你JSP

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

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

有形式方法= 「POST」然後在你的層的servlet,在的doPost方法,你有的getParameter(「名稱」)讓你的表單參數,你想它是什麼,然後重新發送到你的JSP(的setAttribute)。 不要忘了鏈接與你的JSP(我的例子中的最後一行)

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

最後您JSP,從你的servlet要顯示與的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)); 
    } 
%> 

這個例子是一個小計算器,告訴你數字1 +形式的同一頁面上的數字2的結果;)

4

我建議你不要轉發到第二個頁面的初始頁面,而是要重定向到它,以便遵循Post-Redirect-Get pattern

如果你不這樣做,用戶會在他的網址列中看到他發佈數據的頁面地址,如果他點擊後退按鈕,他會收到重複提交郵件的醜陋消息。

所以你doPost()方法只是:

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

方法之一是,你可以隱藏 JSP頁面servlet的後面,有servlet來直接轉發到JSP頁面的GET請求,並且爲POST執行其工作,然後轉發到JSP或重定向到它自己。在這種情況下,您不會在<form>標記中設置任何操作以將數據發佈到相同的URL。

因爲它會保持相同的URL,你最終可能只是做一個前進,但我仍然建議重定向,以避免後退按鈕問題。

相關問題