¿Cuál es la mejor manera de evitar el envío de formularios duplicados en Spring. ¿Este marco proporciona alguna característica especial para manejar este problema (por ejemplo, como Synchronizer Token en Struts)?Envío de formulario duplicado en Spring
Respuesta
Hay diferentes maneras de evitar dobles alega, que se pueden combinar:
Uso JavaScript para
disable
el botón unos pocos ms después del clic. Esto evitará que múltiples envíos sean causados por usuarios impacientes que hagan clic varias veces en el botón.Enviar una redirección después del envío, esto se conoce como Post-Redirect-Get (PRG) pattern. Esto evitará que múltiples envíos sean causados por usuarios presionando F5 en la página de resultados e ignorando el navegador advirtiendo que los datos serán reenviados, o navegando hacia adelante y hacia atrás por los botones de navegación hacia atrás/adelante e ignorando la misma advertencia.
Genera un token único cuando se solicita la página y se coloca tanto en el ámbito de sesión como en el campo oculto del formulario. Durante el procesamiento, verifique si el token está allí y luego quítelo inmediatamente de la sesión y continúe con el procesamiento. Si el token no está allí, entonces bloquea el procesamiento. Esto evitará los tipos de problemas antes mencionados.
En primavera se puede utilizar como RedirectView
aplicación del patrón PRG (como se describe en el punto 2). Los otros dos puntos deben implementarse usted mismo.
Hola, he aplicado el patrón PRG. funciona bien. pero necesito pasar un mensaje al método Get como "ID de usuario 1001 creado con éxito". para eso tengo una variable de nivel de clase de controlador que establecerá su valor en el método de publicación y lo obtendrá en el método GET. Esto creará un problema para el usuario concurrente. ¿Cómo puedo evitar este problema? –
@Dhrumil: almacénelo en la sesión o una cookie en su lugar. – BalusC
no es necesario un poco más de tiempo de procesamiento ... en lugar de nuestro marco de codificación manual debe proporcionar alguna característica como Tokens que Struts2.0 proporciona por defecto. –
Simplemente haga una redirección después de la publicación. Una vez que se haya enviado correctamente un formulario, cuando devuelva su ModelAndView asegúrese de que View es un RedirectView. Desde el POV del usuario, envían el formulario y luego se redirigen para hacer un "GET" a otra URL. De esta forma, no enviarán dos veces.
Tenga en cuenta que al utilizar una vista de redireccionamiento, los atributos del modelo quedan expuestos en la URL como parámetros. Por lo que es posible que desee mantener los atributos lo más delgados posible. Lo que normalmente hago es mostrarle al usuario una página que realmente no contiene ninguna información única, solo un mensaje de "confirmación".
esta página parece responder a su pregunta (para la emisión razón, me refiero a la javascript y después de la redirección-get partes de la pregunta no se cubren aquí.):
http://explodingjava.blogspot.com/2009/03/spring-mvc-synchronizer-token.html
- 1. Spring MVC - Botón de envío múltiple a un formulario
- 2. Formulario Django botón de envío
- 3. php/html formulario de envío
- 4. Envío de un formulario en mecanizado
- 5. Botón Deshabilitar en el envío del formulario
- 6. ¿Cómo envío un formulario en jQuery async?
- 7. Establecer el encabezado de envío de formulario
- 8. Mobile Safari Keyboard Formulario de envío
- 9. Cómo evitar el envío de formulario
- 10. Envío de un formulario html con java
- 11. Envío de un formulario por correo electrónico
- 12. jQuery Mobile y envío de formulario
- 13. Usando spring: mensaje para definir el atributo de etiqueta de formulario en la aplicación web Spring
- 14. ¿Cómo detener el envío del formulario?
- 15. ¿Cómo prevenir el envío del formulario?
- 16. formulario de envío no se detiene en jquery ajax llamada
- 17. Rieles: botones de envío múltiple en un formulario
- 18. ¿Cómo activar manualmente el envío de un formulario en AngularJS?
- 19. Múltiples botones de envío en un formulario HTML
- 20. ¿Cómo puedo probar el envío de un formulario en Jasmine?
- 21. Para crear un formulario de envío en wordpress PHP
- 22. Envío de un formulario + cuadrícula en ExtJS 4
- 23. ¿tiene que estar el botón de envío en el formulario
- 24. Spring MVC: Diferencia entre spring: bind y form: formulario
- 25. ¿Cómo envío un correo electrónico HTML en Spring MVC?
- 26. geocodificando una dirección en el envío del formulario?
- 27. ¿Cómo envío un formulario utilizando el método GET en jQuery
- 28. jQuery Mobile 'return false' en el envío del formulario
- 29. Impedir la redirección en el envío del formulario
- 30. Problema de envío de formulario de Firefox con jQuery
Esto no es específico para cualquier marco, pero puede evitar envíos duplicados con jQuery. http://stackoverflow.com/questions/2830542/prevent-double-submission-of-forms-in-jquery/4473801#4473801 –