[英]response.sendRedirect does not preserve request attributes?
@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代碼
<%
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
由控制器完成。
請提供解決方案
重定向實際上是向客戶端發送指令以HTTP重定向重定向資源。 所以這是一個全新的請求/響應周期,這就是您的屬性丟失的原因。
使用會話部分解決了問題。 你應該特別注意刪除你在會話中放置的東西,否則它將保持為垃圾(如果這些在某些情況下累積 - 不是這種情況 - 它們可能會導致內存泄漏)。
框架解決這個用閃光燈范圍(谷歌搜索它提供鏈接如此 )。
根據您的使用情況,您應該決定什么是最合適的,會話/閃存范圍或轉發。
為了不使用你的屬性:
req.getRequestDispatcher("webpages/mopmapping.jsp").forward(request, response);
代替 :
resp.sendRedirect("webpages/mopmapping.jsp");
祝好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.