繁体   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