Post + Redirect + Get при использовании представленных данных для рендеринга представления результатов - PullRequest
0 голосов
/ 04 сентября 2011

Существует методика веб-программирования под названием Post + Redirect + Get , которая пытается избежать дублирования отправки форм при нажатии кнопки обновления.

Этот шаблон также обсуждается в следующей теме:

Как избежать повторной отправки в JSP при обновлении?

Проблема в том, что этот метод не работает в сценариях, в которых после перенаправления мне нужно визуализировать представление результата , используя представленные параметры . Поскольку второй запрос (тот, который запрашивает страницу результатов) не имеет параметров, отправленных с помощью.

В моем конкретном сценарии у меня есть поисковая форма, которая возвращает список книг в соответствии с заполненными критериями. На странице результатов в заголовке отображается оригинальная форма поиска, заполненная параметрами, которые были отправлены (как это делается в поиске Google). Предположим, что каждая книга в полученном списке представлена ​​таким образом, что вы можете редактировать ее детали. Таким образом, пользователь редактирует одну из книг в списке и представляет отредактированный список (т. Е. Этим он представляет и отредактированную книгу, и исходные критерии поиска). Теперь приложение должно обновить базу данных и снова выполнить ее поиск в соответствии с представленными критериями. Так что я могу сделать обновление базы данных перед перенаправлением. Но я не могу выполнить новый поиск после перенаправления, поскольку к этому времени у меня нет параметров критерия.

Я видел два решения:

  1. Перед перенаправлением сохраните отправленные параметры в сеансе, а затем прочитайте их из сеанса после перенаправления при визуализации представления результатов (и, возможно, удалите их из сеанса после завершения). ---> Я предпочитаю не использовать этот метод, поскольку я не хочу использовать сеанс для этого аспекта моего приложения.

  2. Когда вы перенаправляете на URL-адрес результата, объединяете представленные параметры с URL-адресом (как это делается в запросах GET) (или в любом случае только с теми параметрами, которые вам понадобятся для отображения представления результатов), таким образом вы можете получить параметры после перенаправления при рендеринге представления результатов ---> Решение ОК, не слишком довольное им, поскольку пользователь получит представление результатов с очень длинным URL.

У меня такой вопрос, вы сталкивались с каким-либо другим способом - желательно элегантным - для решения этой проблемы?

Спасибо !!

P.S. Я использую Java и Spring Framework, но думаю, что мой вопрос применим к любой разумной веб-среде.

Ответы [ 2 ]

0 голосов
/ 17 июля 2013

Функция RedirectAttributes в Spring MVC - это именно то, что вам нужно.

0 голосов
/ 04 сентября 2011

Некоторые другие идеи:

  1. Используйте куки
  2. Сохраните информацию в БД и передайте параметр запроса, чтобы найти ее при выполнении Get.
  3. То же, что и # 2, но используется распределенный кеш.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...