簡體   English   中英

response.sendRedirect不保留請求屬性?

[英]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");

祝好運

您可以在請求調度程序中設置URL后執行請求

檢查一下

http://www.javapractices.com/topic/TopicAction.do?Id=181

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM