2010-02-24 5 views
17

Quelle est la meilleure façon d'éviter la soumission de formulaires en double au printemps. Ce framework fournit-il des fonctionnalités spéciales pour gérer ce problème (par exemple, le Synchronizer Token dans Struts)?Soumission de formulaire en double au printemps

+1

Ce n'est pas spécifique à tout framework, mais vous pouvez éviter la soumission en double avec jQuery. http://stackoverflow.com/questions/2830542/prevent-double-submission-of-forms-in-jquery/4473801#4473801 –

Répondre

35

Il existe différentes façons d'éviter les doubles, qui peuvent soumet être combinés:

  1. utiliser JavaScript pour disable le bouton quelques ms après clic. Cela évitera que plusieurs utilisateurs soient provoqués par des utilisateurs impatients qui cliquent plusieurs fois sur le bouton.

  2. Envoyer une redirection après l'envoi, cela s'appelle Post-Redirect-Get (PRG) pattern. Cela évite que plusieurs utilisateurs soient sollicités en appuyant sur la touche F5 de la page de résultats et ignorent que le navigateur avertisse que les données seront renvoyées ou naviguent entre les boutons Précédent/Suivant du navigateur et ignorent le même avertissement.

  3. Générez un jeton unique lorsque la page est demandée et insérez à la fois la portée de session et le champ masqué du formulaire. Pendant le traitement, vérifiez si le jeton est présent, puis supprimez-le immédiatement de la session et continuez le traitement. Si le jeton n'est pas là, bloquez le traitement. Cela permettra d'éviter les types de problèmes mentionnés ci-dessus.

Au printemps, vous pouvez utiliser RedirectView comme la mise en œuvre du modèle PRG (comme décrit au point 2). Les deux autres points doivent être mis en œuvre vous-même.

+0

Salut, j'ai appliqué le modèle PRG. ça fonctionne bien. mais j'ai besoin de passer un message à Get méthode comme "User ID 1001 créé avec succès". pour cela j'ai une variable de niveau de classe de contrôleur qui établira sa valeur à la méthode de post et l'obtiendra à la méthode de GET. Cela créera un problème pour l'utilisateur simultané. Comment puis-je éviter ce problème? –

+0

@Dhrumil: Stockez-le dans la session ou un cookie à la place. – BalusC

+0

aucun son prend plus de temps de traitement .. au lieu de notre cadre de codage manuel devrait fournir une fonctionnalité comme les jetons que Struts2.0 fournit par défaut. –

4

Faites simplement une redirection après la publication. Une fois la soumission de formulaire réussie, lorsque vous renvoyez votre ModelAndView, assurez-vous que la vue est une RedirectView. À partir du POV de l'utilisateur, ils soumettent le formulaire, puis sont redirigés pour faire un "GET" à une autre URL. De cette façon, ils ne vont pas soumettre deux fois.

Notez que lors de l'utilisation d'une vue de redirection, les attributs de modèle sont exposés dans l'URL en tant que paramètres. Vous pouvez donc conserver les attributs aussi fins que possible. Ce que je fais généralement est de montrer à l'utilisateur une page qui ne contient pas vraiment d'informations uniques, juste un message "confirmer".