我有一个jsp页面,我将信息传递到第二页,我在第二页显示信息 使用从ist页面传递的信息。当我使用浏览器后退按钮时出现问题。如何使我的浏览器返回按钮以更新和刷新数据
答案 0 :(得分:1)
唯一的方法是使用HttpSession
- 因为数据在整个会话期间可用 - 结合后重定向 - 获取模式和禁用客户端缓存 - 所以后面按钮不会从浏览器历史记录/缓存中请求页面,而是从服务器请求一个全新的页面
以下是page1.jsp
应该是什么样子的启动示例(请注意meta
标题,这些是禁用浏览器缓存与浏览器缓存兼容的最小设置,您不应该更改它们任何方式):
<!doctype html>
<html lang="en">
<head>
<title>SO question 2175119</title>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
</head>
<body>
<form action="page2" method="post">
<input type="text" name="foo" value="${page1.foo}">
<input type="text" name="bar" value="${page1.bar}">
<input type="submit">
</form>
</body>
</html>
在page2
后面的servlet类中,您需要在Map<String, String>
之类的数据结构中收集请求参数,或者通过HttpSession#setAttribute()
将{{3}}放入会话中的完全Javabean类。 {1}}作为属性名称(以便您可以通过page1
在JSP EL中访问它,如上所示):
${page1}
在protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> page1params = new HashMap<String, String>();
page1params.put("foo", request.getParameter("foo"));
page1params.put("bar", request.getParameter("bar"));
request.getSession().setAttribute("page1", page1params);
// Do remnant of your business logic here if necessary.
// Now redirect to page2.jsp (else the back button won't work,
// because the POST has been expired due to the meta headers).
response.sendRedirect("page2.jsp");
}
中,您可以使用与page2.jsp
中相同的JSP EL方式访问表单数据:
page1.jsp
如果按...
<p>Entered value for "foo" is: ${page1.foo}</p>
<p>Entered value for "bar" is: ${page1.bar}</p>
...
中的后退按钮,它会向服务器发送一个全新的page2.jsp
请求,并从服务器检索GET
,并预先填充会话中的数据。
这一点有一点需要注意:如果您在相同的会话中打开了多个浏览器窗口,则输入/更改的值将相互影响。只要您坚持使用浏览器后退按钮进行导航而不是page1.jsp
中的真实表单按钮,这是不可解决的。
希望这有帮助。
答案 1 :(得分:0)
我不确定,但您可以尝试以下选项。
1)将表单数据存储在会话变量中并在下一页中保持upading。因此,当用户点击(页面加载将发生)按钮时,页面将加载会话变量的新数据。
2)http://www.servletsuite.com/servlets/backtag.htm
3)http://www.theserverside.com/discussions/thread.tss?thread_id=29853
答案 2 :(得分:0)
我认为问题的实质是:在用户按下“返回”后,如何让浏览器重新请求第一页,而不是显示页面的旧的临时缓存版本?
答案是使第1页的抓取结果不可缓存。这是通过HTTP响应头完成的,在JSP中设置这些头的快速而脏的方法是:
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);
%>