2012-05-29 50 views
1

我有3 jsp pages(index.jsp, result1.jsp,result2.jsp)和一個servlet。處理正在被如下實現:在jsp中添加後退按鈕

的index.jsp

<form method="post" action="MYSERVLET" > 
<input type="text" name="studentname" id="studentname"/> 
<input type="submit" value="click" />// goes to a servlet named as MYSERVLET 
</form> 

MYSERVLET

String t=request.getParameter("studentname"); 
------fetching data from database and sending to result1.jsp------ 

     String nextJSP = "/result1.jsp"; 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP); 
     dispatcher.forward(request,response); 

result1.jsp

//檢索從servlet的數據和在顯示result1.jsp數據,並且還通過相同的值到result2.jsp

out.println(retrieved result from servlet); 
<a href="result2.jsp?somestring=<%out.println(retrieved result from servlet);%>"> <%out.println(retrieved result from servlet);%></a>// after clicking on "retrieved result from servlet" i am passing this retrieved value to another jsp result2.jsp and also retrieving some data from database as follows: 

result2.jsp

String w=request.getParameter("somestring"); 
out.println(w); 

我想給一個back button here (in result2.jsp),使點擊back button後,它會帶我去哪裏result1.jsp我可以看到之前顯示的數據(out.println(retrieved result from servlet);)。但是,當我點擊瀏覽器後退按鈕(在result2.jsp),然後每次警報即將"Confirm Form Resubmission"然後我重新加載該頁面看到(out.println(retrieved result from servlet);),我想避免此警報,我該如何避免它?我怎樣才能直接看到沒有任何警報的頁面?

回答

4

我認爲你的問題在於你放在你的servlet中的「forward」動作。 「轉發」只發生在服務器上,瀏覽器不知道服務器上發生了什麼。實際上,即使您在結果1頁面上,您也應該在網址欄中看到「MYSERVLET網址」。所以當你繼續使用result2.jsp時,單擊「back」將只會再次引發Servlet url,而不是「result1.jsp」。由於您的servlet是表單提交的目標,因此您會收到該提醒。

爲了避免這種情況,您應該在servlet中嘗試諸如「重定向」或「sendRedirect」而不是「forward」。在這種情況下,您的瀏覽器會知道地址的變化,您也可以使用後退按鈕。

但請注意,重定向所有發送到您的servlet的請求數據不能直接傳遞給result1.jsp,您應該將它們保存在Session中。試試看this

1

請使用session.setAttribute("name",value);在第一頁上保留會話中的所有數據,並在登陸到第二頁之後,點擊按鈕指定首頁的地址而不顯示任何數據,並在第一頁顯示先前的數據,使用session.getAttribute("name"); 因此,每次在頁面之間切換時,它都會重新加載頁面並獲取會話值。

相關問題