2012-06-20 2 views
1

В моем приложении Spring MVC я отправляю форму на страницу с использованием метода post для выполнения поиска с некоторыми параметрами. Результаты поиска - это список, и для каждой записи можно перейти на страницу сведений. Он отлично работает, но когда пользователь пытается вернуться к странице результатов с помощью кнопки заднего браузера (или Javascript), я получаю сообщение об ошибке «Expire page». Обновляя страницу, она повторно передает сообщение submit, и оно отлично работает.Страница возврата весны mvc и обратная кнопка браузера

Чтобы предотвратить эту ошибку я добавил

response.setHeader("Cache-Control", "no-cache"); 

к контроллеру поиска и все отлично работает с Safari и Firefox, но я получаю ту же «Expire страницы» ошибку при попытке выполнения веб-приложении с помощью IE (8 и 9).

Каков правильный способ перейти на страницу с подробной информацией и вернуться без каких-либо ошибок?

благодарит за ваше время!
Andrea

ответ

3

Правильный способ - использовать GET вместо POST: поиск - это идемпотентная операция, которая не вызывает никаких изменений на сервере, и такие операции должны выполняться с помощью GET.

2

Не истекающий запрос POST кажется подрывать the very idea of a POST:

Per RFC 2616, метод POST должен быть использован для любого контекста, в котором запрос является не-идемпотентная: то есть, это вызывает изменять состояние сервера каждый раз, когда оно выполняется, например, отправлять комментарий в сообщение в блоге или голосовать в онлайн-опросе.

Вместо этого я бы реструктурировал, как вы просматриваете подробные записи, возможно, с наложением DIV, которое не обновляет базовую страницу, показывающую результаты. Со многими современными веб-приложениями с помощью кнопки BACK могут возникать проблемы с потоком страниц.

+0

Я понимаю вашу точку зрения, и в основном я согласен, но в этом случае мне нужно реорганизовать большую часть приложения. Есть ли способ повторно указать значение каждый раз, когда я возвращаюсь на свою страницу? (Т.е. сохранение параметров формы в сеансе? С @ModelAttribute кажется невозможным сделать это –

+0

Если это так, ваша обратная кнопка на странице не должна просто возвращаться 1 в историю, а захватывать параметры в методе обработчика и добавьте их обратно в «Модель», чтобы вы могли отправить их обратно в JSP для повторного использования. Кнопка «Назад» может быть отправкой старой формы. – atrain

Смежные вопросы