2013-10-15 69 views
1
@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 

String branch = req.getParameter("branch"); 
System.out.println(branch); 
MOPMappingDAO dao = new MOPMappingDAO(); 
ArrayList<MOP> mops = dao.getMOP(branch); 
System.out.println("No of MOPS " + mops.size()); 
req.setAttribute("mops",mops); 
resp.sendRedirect("webpages/mopmapping.jsp"); 
} 

上面是我使用resp.sendRedirect()的控制器代碼,所以請求屬性不保存在我的jsp代碼中。這裏是我的JSP代碼response.sendRedirect不保存請求屬性?

<% 
ArrayList<MOP> mops = (ArrayList<MOP>)request.getAttribute("mops"); 
System.out.print(mops); 
System.out.println(mops.size()); 
for(MOP mop : mops){ //searchResults } 
%> 

,我也得到一個NullPointerException因爲mops爲空。在這種情況下,我可以使用request.forward(),但url不包含webpages/mopmapping.jsp。在這種情況下,對於每次刷新,操作//searchResults由控制器完成。

請與解決方案提供

+0

你爲什麼不使用session.setAttribute()和session.getAttribute() – SpringLearner

回答

2

爲了不loste您的屬性使用:

req.getRequestDispatcher("webpages/mopmapping.jsp").forward(request, response); 

相反的:

resp.sendRedirect("webpages/mopmapping.jsp"); 

好運

+0

它沒有幫助。在此更改後,我現在收到404錯誤。 – naXa

2

一個重定向實際上是將指令發送給客戶端設置URL的請求分派後向前做請求到HTTP獲取重定向的資源。所以這是一個全新的請求/響應週期,這就是爲什麼你的屬性丟失了。

使用會話部分解決了問題。你應該格外小心地去除你在會話中放置的東西,否則它會保持爲垃圾(如果這些東西在某些情況下積累 - 不是這種情況 - 它們可能導致內存泄漏)。

框架解決這個與閃光示波器(谷歌搜索它提供的鏈接,如this)。

根據您的使用情況,您應該決定什麼是最合適的,會話/ flash範圍或轉發。