В последнем примере Обработка форм Spring MVC , если вы обновите представление об успешном завершении формы, большинство браузеров запросят всплывающее диалоговое окно для подтверждения повторной отправки формы. Если вы нажмете “да”, форма будет отправлена повторно, этот сценарий хорошо известен как повторная отправка формы.
Рисунок: пример отправки дублированной формы.
Общим решением для этого является использование шаблона проектирования ” Post/Redirect/Get “. Он перенаправит на другой URL-адрес, если отправка формы будет успешной, вместо того, чтобы возвращать веб-страницу напрямую.
Опубликовать/Перенаправить/Получить шаблон дизайна в Spring MVC
В этом уроке мы покажем вам, как применить шаблон проектирования ” Опубликовать/Перенаправить/Получить ” в Spring MVC для решения проблемы с отправкой дублированной формы в примере последняя обработка формы .
1. Отправка дубликата формы
См. Ниже объявление обычной формы, в котором будет решена проблема с отправкой дубликатов форм.
Файл: mvc-dispatcher-servlet.xml
/WEB-INF/pages/ .jsp
В приведенном выше фрагменте кода CustomerController
возвращает представление ” Успех клиента ” напрямую, которое должно быть заменено URL-адресом перенаправления вместо этого.
2. Перенаправление Просмотра
Объявил просмотр обзора с именем ” Перенаправление успеха клиента ” и вернул URL-адрес ” CustomerSuccess.htm “.
Файл: spring-views.xml
3. Конфигурация пружины
Обновите mvc-dispatcher-servlet.xml настройки, чтобы связать всю конфигурацию Spring вместе.
- Обновите ” представление успеха ” до нового представления перенаправления с именем ” Перенаправление успеха клиента “.
- Объявите ” XmlViewResolver “, чтобы загрузить представление перенаправления.
- Установите приоритетный порядок для ” InternalResourceViewResolver ” и ” xmlviewresolver “, в противном случае ” InternalResourceViewResolver ” всегда будет совпадать и не даст вашему приложению возможности вызвать ” xmlviewresolver “.
- Объявите контроллер ” ParameterizableViewController “, соответствующий URL-адресу перенаправления, и верните представление пользователю. Поскольку ” ControllerClassNameHandlerMapping ” не будет генерировать сопоставление для любого встроенного контроллера Spring, поэтому вам необходимо определить явное сопоставление в ” simpleurlhandlermapping “.
Файл: mvc-dispatcher-servlet.xml
customerSuccessController /WEB-INF/pages/ .jsp /WEB-INF/spring-views.xml
4. Как это работает?
1. URL доступа: http://localhost:8080/SpringMVC/customer.htm .
2. Заполните и отправьте форму.
3. Верните “Представление успеха”, которое является ” перенаправление успеха клиента “.
4. ” XmlViewResolver” сопоставьте его и верните “Представление перенаправления” с URL” CustomerSuccess.htm “.
5. “”Simpleurlhandlermapping” сопоставьте его и верните параметризуемый контроллер просмотра ” Контроллер успеха клиента ” и верните имя представления ” Customersuccess “.
customerSuccessController
6. ” InternalResourceViewResolver “сопоставьте его и верните окончательный вид” /WEB-INF/страницы/Успех клиента.jsp “.
/WEB-INF/pages/ .jsp
7. URL-адрес изменен на http://localhost:8080/SpringMVC/CustomerSuccess.htm .
8. Попробуйте обновить страницу формы успешной отправки, диалоговое окно повторной отправки формы больше не будет запрашивать.
Скачать Исходный Код
Рекомендации
Оригинал: “https://mkyong.com/spring-mvc/handling-duplicate-form-submission-in-spring-mvc/”