Обработка браузером кнопки «Назад» в jsp - PullRequest
2 голосов
/ 27 июля 2010

У меня есть страница поиска jsp (Search.jsp) и страница результатов (Result.jsp), они оба могут выбирать критерии поиска. а затем передал параметры в файл контроллера Java (Controller.java), чтобы построить строку запроса и выполнить поиск запроса. Строка запроса и результаты поиска будут переданы в Result.jsp для отображения.

В настоящее время я использую servletContext для запоминания обработанной строки запроса, и если пользователи используют Result.jsp для выбора критериев поиска, Controller.java добавит такие критерии к существующей строке запроса. Если я сделаю несколько поисков, используя Result.jsp. Например, строка запроса будет отображать ((Query1) AND Query2) AND Query3 на странице Result.jsp. Затем с помощью кнопки «Назад» браузера, чтобы вернуться на предыдущую страницу отображения. Для того же примера строка запроса отображает (Query1) AND Query2. Тогда, если я буду искать снова. Будет использована строка запроса (((Query1) AND Query2) AND Query3) AND Query4. Я знаю, что это ожидается с моей текущей реализацией, поскольку Result.jsp не вносит никаких изменений в обработанную строку запроса.

Однако мне хотелось бы, чтобы пользователь использовал кнопку «Назад» в браузере, например, строка запроса отображалась на странице как (Query1) AND Query2, а для поиска выполнялась строка запроса ((Query1) AND Query2) AND Query4, в которой строка запроса основана на построении в текущей отображаемой строке запроса на странице Result.jsp плюс текущий выбор. Как я могу это сделать? Это звучит довольно просто, но я попробовал несколько способов использования in Result.jsp для обновления строки запроса, но все еще не смог сделать это правильно. Поэтому мне интересно, может быть, мой подход к использованию <c:set> неверен. Я хотел бы услышать ваше предложение. Заранее спасибо.

1 Ответ

6 голосов
/ 27 июля 2010

В настоящее время я использую servletContext, чтобы запомнить обработанную строку запроса

Понимаете ли вы, что ServletContext является общим для всех пользователей / сеансов, которые посещают ваше веб-приложение? Как только посетитель X изменит его, изменения будут отражены для всех остальных посетителей . Разве вы не хотите хранить его в HttpSession, чтобы сохранить данные для конкретного посетителя?

Смотри также:


Я хочу использовать кнопку возврата по некоторым причинам

Мне действительно трудно понять ваше функциональное требование (часть почему-то ). Но, по крайней мере, поскольку вы хотите, чтобы кнопка «назад» работала правильно, вы хотели бы использовать идемпотентные запросы здесь. Поэтому, где это применимо, замените POST на GET.

Всякий раз, когда вы хотите обновить реальный HTTP-запрос на сервере вместо загрузки страницы из кэша браузера, вы должны указать браузеру не кэшировать страницы, добавив в ответ следующие заголовки:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

Вы можете сделать это в своем контроллере или некоторых Filter, покрывающих url-pattern интерес.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...