我该如何传递隐藏参数?我想调用一个页面(test.jsp),但是也想像post一样传递2个隐藏参数。
response.sendRedirect("/content/test.jsp");
我该如何传递隐藏参数?我想调用一个页面(test.jsp),但是也想像post一样传递2个隐藏参数。
response.sendRedirect("/content/test.jsp");
TheNewIdiot的答案成功解释了这个问题以及为什么在重定向时无法发送请求属性。可能的解决方案:
使用转发。这将使请求属性能够传递到视图中,您可以通过ServletRequest#getAttribute
或使用表达式语言和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}" />
如果您不能使用转发(因为您不喜欢它或者您觉得不舒服,或者您必须使用重定向),那么一个选项是将消息保存为会话属性,然后重定向到您的视图,在视图中恢复会话属性并从会话中移除它。记住始终只保留与用户相关的数据。 代码示例
控制器
//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");
视图
再次展示使用脚本片段以及EL + JSTL:
<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>
<c:out value="${sessionScope.message}" />
<c:remove var="message" scope="session" />
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp");
dispatcher.forward(request, response);
RequestDispatcher
。 - AllTooSir使用session
,我成功地从servlet #1传递了一个参数(name
)到servlet #2,在servlet #1中使用response.sendRedirect
。Servlet #1代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String name = request.getParameter("name");
String password = request.getParameter("password");
...
request.getSession().setAttribute("name", name);
response.sendRedirect("/todo.do");
name
。它已经连接到会话。您可以执行String name = (String) request.getSession().getAttribute("name");
---但您不需要这样做。
如果Servlet #2调用JSP,则可以通过以下方式在JSP网页上显示name
:
<h1>欢迎 ${name}</h1>
out.println("<script>window.location.href = \"hoadon?OrderId=" + getIdOrder + "\"\n</script>>");
在response.sendRedirect()中通过URL发送变量值。我已经用它来处理一个变量,你也可以通过适当的连接将其用于两个变量。
字符串值="xyz";
response.sendRedirect("/content/test.jsp?var="+value);