我将如何传递隐藏参数?我想调用一个页面(test.jsp),但也像帖子一样传递 2 个隐藏参数。
response.sendRedirect("/content/test.jsp");
新白痴的回答 https://stackoverflow.com/a/17001209/1065197成功解释了问题以及无法通过重定向在请求中发送属性的原因。可能的解决方案:
-
使用转发。这将使请求属性可以传递到视图,您可以以以下形式使用它们ServletRequest#getAttribute http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getAttribute(java.lang.String)或通过使用表达语言 https://stackoverflow.com/tags/el/info and JSTL https://stackoverflow.com/tags/jstl/info。简短的示例(重用 TheNewIdiot 的回答]代码)。
控制器(您的 servlet)
request.setAttribute("message", "Hello world");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
查看(您的 JSP)
使用脚本:
<%
out.println(request.getAttribute("message"));
%>
这只是为了信息目的。小脚本的使用必须避免: 如何避免JSP文件中出现Java代码? https://stackoverflow.com/q/3177733/1065197。下面是使用 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");
View
再次使用 scriptlet 和 EL + JSTL 来展示这一点:
<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>
<c:out value="${sessionScope.message}" />
<c:remove var="message" scope="session" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)