У меня есть страница jsp, на которой я передаю информацию на 2-ю страницу, где я отображаю информацию на 2-й странице , используя информацию, переданную с страницы ist. Проблема возникает, когда я пользуюсь кнопкой назад. могу ли я сделать кнопку моего браузера, чтобы обновить и обновить данные?Мой jsp не обновляется
ответ
Я не уверен, но вы можете попробовать следующие варианты.
1) храните данные формы в переменной сеанса и продолжайте уклоняться на следующей странице. Таким образом, когда пользователь ударит назад (произойдет загрузка страницы), страница загрузится с новыми переменными сеанса.
2) http://www.servletsuite.com/servlets/backtag.htm
3) http://www.theserverside.com/discussions/thread.tss?thread_id=29853
Единственный способ заключается в использовании HttpSession
для этого -SO, что данные доступны в течение всего session-, в комбинации с последующей переадресацией-получить образец и отключение кеша на стороне клиента, так что кнопка «Назад» не запрашивает страницу из истории браузера/кеша, но вместо этого запрашивает новую версию с сервера
Вот пример запуска, как должно выглядеть page1.jsp
(обратите внимание на meta
заголовки, те минимальный набор, чтобы отключить кэш браузера на Crossbrowser-совместимый путь, вы не должны изменять их любым способом):
<!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
вам необходимо собрать параметры запроса в структура данных подобно Map<String, String>
или fullworthy бина класс, который вы положили в сессии HttpSession#setAttribute()
с 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
с сервера, с предварительно заполненными данными.
Это все, однако, одно предостережение: если у вас открыто несколько окон браузера внутри сеанса, то введенные/измененные значения будут влиять друг на друга. Это не обходимо, если вы настаиваете на использовании кнопки браузера для навигации, а не в форме кнопки формы в page2.jsp
.
Надеюсь, это поможет.
Я думаю, что суть вопроса: как я могу заставить браузер повторно запрашивать первую страницу после того, как пользователь нажимает «Назад», а не отображает старую, временно кэшированную версию страницы?
Ответ будет заключаться в том, чтобы сделать результат выборки страницы 1 непонятным.Это делается с помощью заголовков ответа HTTP, и быстрый и грязный способ установить эти заголовки в JSP является:
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);
%>
Это предпочтительнее делать в фильтре/сервлете или с использованием метатег HTML. Кроме того, этот набор не будет работать в Firefox и несколько других. О, это также не отвечает на его вопрос о сохранении новых данных вообще. См. Мой ответ для правильного подхода и правильных заголовков. – BalusC
дают код, добавить некоторые знаки препинания и объяснить лучше – Bozho
Как вы перетасовать от одного к другому JSP? –
Я получаю проблему, когда я использую кнопку назад браузера, чтобы перейти к ist jsp, чтобы выбрать одну гиперссылку, которая передает 2 параметра, на основании которых данные отображаются на 2-й странице. – Sam