如何传递隐藏参数?我想调用一个页面(test.jsp),但也传递 2 个隐藏参数,如帖子。
response.sendRedirect("/content/test.jsp");
最佳答案
TheNewIdiot's answer成功解释了问题以及无法通过重定向在请求中发送属性的原因。可能的解决方案:
使用转发。这将使请求属性可以传递给 View ,您可以以
ServletRequest#getAttribute
的形式使用它们或使用 Expression Language和 JSTL .简短示例(重用 TheNewIdiot 的答案] 代码)。Controller (您的 servlet)
request.setAttribute("message", "Hello world"); RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url); dispatcher.forward(request, response);
查看(您的 JSP)
使用小脚本:
<% out.println(request.getAttribute("message")); %>
这仅用于信息目的。 必须避免使用小脚本:How to avoid Java code in JSP files? .下面是使用EL和JSTL的例子。
<c:out value="${message}" />
如果你不能使用转发(因为你不喜欢它,或者你不这么觉得,或者因为你必须使用重定向),那么一个选项是将消息保存为 session 属性,然后重定向到您的 View ,在您的 View 中恢复 session 属性并从 session 中将其删除。请记住始终让您的用户 session 只包含相关数据。代码示例
Controller
//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" />
关于java - 使用 response.sendRedirect() 传递隐藏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001185/