2010-02-01 2 views
1

У меня есть страница jsp, на которой я передаю информацию на 2-ю страницу, где я отображаю информацию на 2-й странице , используя информацию, переданную с страницы ist. Проблема возникает, когда я пользуюсь кнопкой назад. могу ли я сделать кнопку моего браузера, чтобы обновить и обновить данные?Мой jsp не обновляется

+0

дают код, добавить некоторые знаки препинания и объяснить лучше – Bozho

+0

Как вы перетасовать от одного к другому JSP? –

+0

Я получаю проблему, когда я использую кнопку назад браузера, чтобы перейти к ist jsp, чтобы выбрать одну гиперссылку, которая передает 2 параметра, на основании которых данные отображаются на 2-й странице. – Sam

ответ

0

Я не уверен, но вы можете попробовать следующие варианты.

1) храните данные формы в переменной сеанса и продолжайте уклоняться на следующей странице. Таким образом, когда пользователь ударит назад (произойдет загрузка страницы), страница загрузится с новыми переменными сеанса.

2) http://www.servletsuite.com/servlets/backtag.htm

3) http://www.theserverside.com/discussions/thread.tss?thread_id=29853

1

Единственный способ заключается в использовании 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.

Надеюсь, это поможет.

0

Я думаю, что суть вопроса: как я могу заставить браузер повторно запрашивать первую страницу после того, как пользователь нажимает «Назад», а не отображает старую, временно кэшированную версию страницы?

Ответ будет заключаться в том, чтобы сделать результат выборки страницы 1 непонятным.Это делается с помощью заголовков ответа HTTP, и быстрый и грязный способ установить эти заголовки в JSP является:

<% 
response.setHeader("Cache-Control","no-cache"); 
response.setHeader("Pragma","no-cache"); 
response.setDateHeader ("Expires", 0); 
%> 
+0

Это предпочтительнее делать в фильтре/сервлете или с использованием метатег HTML. Кроме того, этот набор не будет работать в Firefox и несколько других. О, это также не отвечает на его вопрос о сохранении новых данных вообще. См. Мой ответ для правильного подхода и правильных заголовков. – BalusC