Qual è il modo migliore per evitare l'invio di moduli duplicati in primavera. Questo framework fornisce funzionalità speciali per gestire questo problema (ad esempio come Synchronizer Token in Struts)?Invio di moduli duplicati in primavera
risposta
Ci sono diversi modi per evitare la doppia sostiene, che possono essere combinati:
utilizzare Javascript per
disable
il pulsante pochi ms dopo scatto. Ciò eviterà che più invii siano causati da utenti impazienti che fanno clic più volte sul pulsante.Invia un reindirizzamento dopo l'invio, questo è noto come Post-Redirect-Get (PRG) pattern. Ciò eviterà l'invio di più segnalazioni da parte degli utenti che premono F5 sulla pagina dei risultati e ignorando il browser che avverte che i dati verranno rinviati, o navigando avanti e indietro dai pulsanti Indietro/Avanti del browser e ignorando lo stesso avviso.
Genera un token univoco quando viene richiesta la pagina e inserisce sia l'ambito della sessione sia il campo nascosto del modulo. Durante l'elaborazione, controllare se il token è presente e quindi rimuoverlo immediatamente dalla sessione e continuare l'elaborazione. Se il token non è lì, quindi bloccare l'elaborazione. Ciò eviterà i suddetti tipi di problemi.
In primavera è possibile utilizzare come RedirectView
attuazione del pattern PRG (come descritto al punto 2). Gli altri due punti devono essere implementati da soli.
Ciao Ho applicato il modello PRG. funziona bene ma ho bisogno di passare un messaggio per ottenere il metodo come "User ID 1001 creato con successo". per questo ho una variabile di livello di classe controller che imposterà il suo valore al metodo post e lo otterrà nel metodo GET. Ciò creerà un problema per l'utente concorrente. Come posso evitare questo problema? –
@Dhrumil: memorizzalo invece nella sessione o un cookie. – BalusC
no, ci vuole un po 'più di tempo di elaborazione. Invece del nostro manuale, il framework di codifica dovrebbe fornire alcune funzionalità come i token che Struts2.0 fornisce come predefiniti. –
Basta fare un reindirizzamento dopo la pubblicazione. Dopo che l'inoltro di un modulo è andato a buon fine, quando si restituisce ModelAndView assicurarsi che la vista sia un RedirectView. Dal POV dell'utente, inviano il modulo e quindi vengono reindirizzati per creare un "GET" su un altro URL. In questo modo non si raddoppieranno.
Si noti che quando si utilizza una vista di reindirizzamento, gli attributi del modello vengono esposti nell'URL come parametri. Quindi potresti voler mantenere gli attributi il più sottili possibile. Quello che faccio di solito è mostrare all'utente una pagina che in realtà non contiene alcuna informazione unica, solo un messaggio di "conferma".
questa pagina sembra rispondere alla tua domanda (per il rilascio di token, intendo il javascript e post-redirect-get parti della questione non sono coperti qui.):
http://explodingjava.blogspot.com/2009/03/spring-mvc-synchronizer-token.html
- 1. Prevenire invii duplicati di moduli
- 2. Test di integrazione di Grails - Invio di moduli duplicati sempre non validoToken
- 3. jQuery Mobile e invio moduli
- 4. Invio di moduli con Mechanize (Python)
- 5. invio di più moduli con AJAX
- 6. Invio di moduli asincroni con parsley.js
- 7. Invio di un'attività in background dall'app mvc di primavera
- 8. Modulo di invio in primavera MVC 3 - spiegazione
- 9. Stivale Primavera servletDispatchers a più moduli
- 10. Evitare l'invio di moduli duplicati in Asp.net MVC facendo clic su Invia due volte
- 11. Invio di 2 moduli allo stesso tempo utilizzando JavaScript
- 12. Invia moduli multipli con un pulsante di invio
- 13. inviare due moduli con un pulsante di invio jQuery
- 14. Esiste una libreria per impedire l'invio di moduli duplicati per django?
- 15. Primavera Boot MVC tra più moduli executeable vaso
- 16. moduli Zend in moduli
- 17. Django - UpdateView con moduli in linea che cercano di salvare i record duplicati?
- 18. jQuery duplicati ID duplicati
- 19. Invio di due o più moduli allo stesso servlet in JSP
- 20. Come inviare 2 moduli in una pagina con un singolo pulsante di invio
- 21. Invio di moduli Ajax in symfony2 con degradazione aggraziata per utenti senza javascript
- 22. rimozione di duplicati in nsarray
- 23. Invio di un file e dati JSON al servizio di riposo a primavera
- 24. Primavera Boot 1.2.5.RELEASE - Invio di e-mail tramite SMTP di Gmail
- 25. modelli Django evitare duplicati
- 26. Evita l'invio di più moduli
- 27. Invio di boost semplice; consigli?
- 28. Trova duplicati in NSArray
- 29. Alternative alla sicurezza di primavera in Java (primavera)
- 30. Duplicati cartelle in github
Questo non è specifico per qualsiasi framework, ma puoi evitare l'invio duplicato con jQuery. http://stackoverflow.com/questions/2830542/prevent-double-submission-of-forms-in-jquery/4473801#4473801 –