В дополнение к диалоговым окнам хода выполнения, описанным в других ответах, можно:
ProgressBar
в действие, как показано здесь RotateAnimation
и собственное пользовательское изображение Существуют различные пути избежать двойной отправки, которые могут
С помощью JavaScript отключите
кнопку через несколько мс после нажатия. Это позволит избежать множественных представлений, вызванных нетерпеливыми пользователями, которые нажимают несколько раз на кнопку.
Отправка перенаправления после отправки - это шаблон Post-Redirect-Get (PRG) . Это позволит избежать многократных представлений, вызванных нажатием пользователем F5 на странице результатов и игнорированием предупреждения браузера о том, что данные будут отправлены повторно, или переходом назад и вперед с помощью кнопок возврата/пересылки браузера и игнорированием того же предупреждения.
Создание уникального маркера, когда страница запрашивается и помещается как в область сеанса, так и в скрытое поле формы. Во время обработки проверьте наличие маркера, а затем немедленно удалите его из сеанса и продолжите обработку. Если маркера нет, то блокируйте обработку. Это позволит избежать вышеупомянутых типов проблем.
Весной можно использовать RedirectView
в качестве реализации образца PRG (как описано в пункте 2). Остальные два момента необходимо реализовать самостоятельно.
Просто сделайте редирект после публикации. После успешной отправки формы при возврате вашего ModelAndView убедитесь, что View является RedirectView. Из точки зрения пользователя они отправляют форму, а затем перенаправляются, чтобы сделать «GET» на другой URL-адрес. Таким образом, они не будут подчиняться дважды.
Обратите внимание, что при использовании представления перенаправления атрибуты модели отображаются в URL-адресе в качестве параметров. Так что вы можете захотеть, чтобы атрибуты были как можно более тонкими. Что я обычно делаю, так это показываю пользователю страницу, которая на самом деле не содержит какой-либо уникальной информации, а только "подтверждающее" сообщение.