Pour résoudre le problème de la soumission répétée des formulaires dans les projets, il existe les situations suivantes dans des projets ordinaires où une soumission répétée de formulaires peut se produire, comme:
1. En raison du délai lent serveur ou réseau, cliquez sur le bouton Soumettre à plusieurs reprises
2. La soumission a été terminée avec succès, mais la page réussie a été rafraîchie
3. La soumission a été achevée avec succès. En retombant, cliquez à nouveau sur le bouton Soumettre.
Toutes ces situations peuvent provoquer trop des mêmes données redondantes à générer dans la base de données et les ressources de base de données des déchets. Seul le transfert apparaîtra et la redirection ne le fera pas.
La solution pour le premier cas (utilisant JavaScript) ne fonctionne pas pour les deux derniers:
Ajoutez d'abord le code JavaScript dans le format suivant à la page
var soumidFlag = false; Fonction CheckksUsBmit () {if (! phredFlag) {phredFlag = true; Document.Forms [0] .Submit (); }}(1) Lorsque l'attribut de type du bouton Soumettre est le bouton:
Définissez simplement le bouton onClick = ”Checksubmit ();”.
(2) Lorsque l'attribut de type du bouton Soumettre est soumis:
Définissez le bouton onclick = "checksubmit ();" et ajouter onsubmit = "returnfalse" à la balise <form>. Étant donné que lorsque le bouton Soumettre est automatiquement soumis, une fois l'événement de clic soumis, l'Onsubmit est défini sur "returnfalse", la soumission automatique du bouton Soumettre sera invalide.
Pour les deux situations suivantes, vous pouvez utiliser la session pour résoudre le problème. Le principe consiste à placer des informations dans la session lors de l'exécution de la page d'ajout d'informations, puis de soumettre les informations au servlet de traitement sur la page. Le servlet obtient les informations de la session. S'il y a des informations dans la session qui ne sont pas vides, insérez les informations dans la base de données, puis supprimez les informations de la session. Les informations de la session sont vides la prochaine fois que le formulaire sera soumis, le processus d'information stocké ne sera pas exécuté.
Cependant, le simple fait d'utiliser la session a ses limites, donc dans le développement réel, il est généralement utilisé pour utiliser la session combinée avec l'UUID pour résoudre les soumissions répétées de formulaires. Le code est le suivant:
Définir une classe uuidtoken
classe publique uUidToken {private static uuidToken uuidToken = new uuidToken (); private uuidToken () {} public static uuidToken getUuidToken () {return uuidToken;} public sychronisé getUUIDAsstr (httpservlersest request) {httpSession Session = request) uuidstr = uUid.randomuuid (). toString (); if (uuidstr! = null) {session.setAttribute ("session.uuid", uuidstr);} return uuidstr;} / ** * déterminer si le bœuf uuid en session et l'UUID sur la page JSP sont égaux * / / Synchrones public ISUUIDVALIDAD (HttpServLetRequest Request) {// Obtenez la session existante httSSession session = request.getSession (false); if (session == null) {return false;} string sessionuuid = (string) session.getAttribute ("session.uuid"); if (sessionUuid == null) {return false;} String " htmlLUUID = request.getParameter ("html.uuid"); if (htmLluUid == null) {return false;} return sessionUuid.equals (htmlLUUID);} / ** * Delete UUID * / public Synchronized Void Résetuuid (httserservil session = request.getSession (false); if (session == null) {return;} session.reMoveAttribute ("session.uuid");}}Ajoutez un domaine caché à la page JSP, utilisez UUID pour générer un numéro d'identification unique, affectez-le au domaine caché et placez le numéro d'identification unique dans une copie de la session. Le code est le suivant:
<input type = "Hidden" name = "html.uuid" value = '<% = uuidtoken.getuuidToken (). getUuidasstr (request)%>'>
Après avoir soumis au servlet, obtenez la valeur du domaine caché de la page JSP et comparez la valeur du domaine caché avec la valeur placée dans la session. Si la même chose, enregistrez les données et supprimez l'UUID de la session. S'il n'est pas pareil, cela signifie qu'il s'agit d'une soumission répétée et qu'aucun traitement n'est effectué.
Booléen drapeau = uuidtoken.getuuidToken (). ISUUIDValidate (request); if (Flag) {// Enregistrer des informations dans la base de données // delete uuidtoken.getuuidToken (). Resetuuid (request);} else {System.out.println ("Form Repened soumission");}Résumer
Ce qui précède concerne la brève discussion de cet article sur l'utilisation de la session pour empêcher les soumissions répétées de formulaires. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!