Существует методика веб-программирования под названием Post + Redirect + Get , которая пытается избежать дублирования отправки форм при нажатии кнопки обновления.
Этот шаблон также обсуждается в следующей теме:
Как избежать повторной отправки в JSP при обновлении?
Проблема в том, что этот метод не работает в сценариях, в которых после перенаправления мне нужно визуализировать представление результата , используя представленные параметры . Поскольку второй запрос (тот, который запрашивает страницу результатов) не имеет параметров, отправленных с помощью.
В моем конкретном сценарии у меня есть поисковая форма, которая возвращает список книг в соответствии с заполненными критериями. На странице результатов в заголовке отображается оригинальная форма поиска, заполненная параметрами, которые были отправлены (как это делается в поиске Google). Предположим, что каждая книга в полученном списке представлена таким образом, что вы можете редактировать ее детали. Таким образом, пользователь редактирует одну из книг в списке и представляет отредактированный список (т. Е. Этим он представляет и отредактированную книгу, и исходные критерии поиска). Теперь приложение должно обновить базу данных и снова выполнить ее поиск в соответствии с представленными критериями.
Так что я могу сделать обновление базы данных перед перенаправлением. Но я не могу выполнить новый поиск после перенаправления, поскольку к этому времени у меня нет параметров критерия.
Я видел два решения:
Перед перенаправлением сохраните отправленные параметры в сеансе, а затем прочитайте их из сеанса после перенаправления при визуализации представления результатов (и, возможно, удалите их из сеанса после завершения). ---> Я предпочитаю не использовать этот метод, поскольку я не хочу использовать сеанс для этого аспекта моего приложения.
Когда вы перенаправляете на URL-адрес результата, объединяете представленные параметры с URL-адресом (как это делается в запросах GET) (или в любом случае только с теми параметрами, которые вам понадобятся для отображения представления результатов), таким образом вы можете получить параметры после перенаправления при рендеринге представления результатов ---> Решение ОК, не слишком довольное им, поскольку пользователь получит представление результатов с очень длинным URL.
У меня такой вопрос, вы сталкивались с каким-либо другим способом - желательно элегантным - для решения этой проблемы?
Спасибо !!
P.S. Я использую Java и Spring Framework, но думаю, что мой вопрос применим к любой разумной веб-среде.