我使用HashMap
将RequestDispatcher
个自定义对象传递给JSP,并且我能够使用JSTL访问该对象及其属性。
但是,如果使用response.sendRedirect()
发送参数,代码将失败。
我不确定原因是什么以及如何使其发挥作用?
答案 0 :(得分:0)
response.sendRedirect()
基本上指示客户端(网络浏览器)在给定的网址上发送新请求。您还会看到浏览器地址栏中的更改会反映出这一点。
新请求当然不包含先前(或任何其他)请求的属性。否则,这将破坏“请求范围”的整个概念。
要预处理GET请求,您需要在servlet的doGet()
方法中执行该作业,然后重定向到该servlet的URL。
E.g。
response.sendRedirect(request.getContextPath() + "/foo");
和
@WebServlet("/foo")
public class FooServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, Foo> foos = fooService.map();
request.setAttribute("foos", foos);
request.getRequestDispatcher("/WEB-INF/foo.jsp").forward(request, response);
}
}
请注意,此问题与无法相关,与请求范围中的自定义对象的哈希映射相关。
答案 1 :(得分:0)
您无法在response.sendRedirect中共享请求属性,因为它会创建新请求。
但是,如果你想要那个HashMap,在response.sendRedirect中,你可以把它放在会话中
request.getSession().setAttribute("myMap", [HashMap object]);
并且可以在servlet和JSP之间共享。这适用于RequestDispatcher和sendRedirect。