3
@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都由控制器完成。

请提供解决方案

4

3 回答 3

4

为了不丢失您的属性,请使用:

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

代替 :

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

祝你好运

于 2015-06-20T14:13:59.367 回答
2

重定向实际上是向客户端发送一条指令以 HTTP GET 重定向的资源。所以这是一个全新的请求/响应周期,这就是你的属性丢失的原因。

使用会话部分地解决了这个问题。您应该格外小心地删除您放置在会话中的东西,否则它将作为垃圾保留(如果这些在某些情况下累积 - 不是这种情况 - 它们可能会导致内存泄漏)。

框架用 flash 范围解决了这个问题(谷歌搜索它提供了这样的链接

根据您的用例,您应该决定什么是最合适的,会话/闪存范围或转发。

于 2013-10-15T10:29:40.810 回答
0

您可以在请求调度程序中设置 URL 后进行请求转发

检查这个

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

于 2013-10-15T10:09:26.660 回答