TheNewIdiot的答案成功说明了问题以及无法通过重定向发送请求中的属性的原因。可能的解决方案:
- 使用转发。这将使请求属性可以传递到视图,并且您可以以
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}" />
- 如果您不能使用转发(因为您不喜欢它,或者您不喜欢这种方式,或者因为必须使用重定向),则可以选择将消息另存为会话属性,然后重定向到您的视图,请在您的视图中恢复会话属性 并将其 从会话中 删除 。切记始终仅使用相关数据进行用户会话。代码示例
控制者
//if request is not from HttpServletRequest, you should do a typecast beforeHttpSession session = request.getSession(false);//save message in sessionsession.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" />
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)