小编典典

使用response.sendRedirect()传递隐藏参数

jsp

如何传递隐藏参数?我想调用一个页面(test.jsp),但还要传递2个隐藏的参数,如post。

response.sendRedirect("/content/test.jsp");

阅读 1244

收藏
2020-06-08

共1个答案

小编典典

TheNewIdiot的答案成功说明了问题以及无法通过重定向发送请求中的属性的原因。可能的解决方案:

  1. 使用转发。这将使请求属性可以传递到视图,并且您可以以ServletRequest#getAttribute或通过使用Expression Language和JSTL的形式使用它们。简短示例(重用TheNewIdiot的答案)代码。

控制器(您的servlet)

    request.setAttribute("message", "Hello world");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);

查看(您的JSP)

使用脚本:

    <%
    out.println(request.getAttribute("message"));
%>

这仅供 参考必须避免使用小脚本:如何避免JSP文件中的Java代码?。下面是使用EL和JSTL的示例。

    <c:out value="${message}" />
  1. 如果您不能使用转发(因为您不喜欢它,或者您不喜欢这种方式,或者因为必须使用重定向),则可以选择将消息另存为会话属性,然后重定向到您的视图,请在您的视图中恢复会话属性 并将其 从会话中 删除 。切记始终仅使用相关数据进行用户会话。代码示例

控制者

    //if request is not from HttpServletRequest, you should do a typecast before
HttpSession session = request.getSession(false);
//save message in session
session.setAttribute("helloWorld", "Hello world");
response.sendRedirect("/content/test.jsp");

视图

再次,使用scriptlet和EL + JSTL进行显示:

    <%
    out.println(session.getAttribute("message"));
    session.removeAttribute("message");
%>

<c:out value="${sessionScope.message}" />
<c:remove var="message" scope="session" />
2020-06-08