@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
由控制器完成。
请提供解决方案
答案 0 :(得分:2)
重定向实际上是向客户端发送指令以HTTP重定向重定向资源。所以这是一个全新的请求/响应周期,这就是你的属性丢失的原因。
使用会话可以部分解决问题。你应该特别小心地删除你在会话中放置的东西,否则它将保留为垃圾(如果这些在某些情况下累积 - 不是这种情况 - 它们可能会导致内存泄漏)。
框架使用闪存范围解决此问题(谷歌搜索提供this等链接。
根据您的使用情况,您应该决定什么是最合适的,会话/闪存范围或转发。
答案 1 :(得分:2)
为了不使用你的属性:
req.getRequestDispatcher("webpages/mopmapping.jsp").forward(request, response);
而不是:
resp.sendRedirect("webpages/mopmapping.jsp");
祝你好运
答案 2 :(得分:0)