لحل مشكلة تقديم النموذج المتكرر في المشاريع ، هناك الحالات التالية في المشاريع العادية حيث قد يحدث تقديم النموذج المتكرر ، مثل:
1. بسبب تأخير الخادم البطيء أو الشبكة ، انقر فوق الزر "إرسال" مرارًا وتكرارًا
2. تم الانتهاء من التقديم بنجاح ، ولكن تم تحديث الصفحة الناجحة
3. تم الانتهاء من التقديم بنجاح. عن طريق التراجع ، انقر فوق زر إرسال مرة أخرى.
قد تتسبب كل هذه المواقف في إنشاء الكثير من البيانات الزائدة نفسها في موارد قاعدة بيانات قاعدة البيانات والنفايات. سوف تظهر إعادة التوجيه فقط ، وإعادة التوجيه لن.
لا يعمل الحل للحالة الأولى (باستخدام JavaScript) للاثنين الأخير:
أضف أولاً رمز JavaScript بالتنسيق التالي إلى الصفحة
var submitflag = false ؛ الدالة checksubmit () {if (! submitflag) {submitFlag = true ؛ document.forms [0] .Submit () ؛ }}(1) عندما تكون سمة النوع لزر الإرسال هي الزر:
فقط قم بتعيين الزر OnClick = "checksubmit () ؛".
(2) عند تقديم سمة النوع لزر الإرسال:
قم بتعيين الزر OnClick = "CheckSubmit () ؛" وأضف onsubmit = "returnfalse" إلى علامة <Porm>. لأنه عند إرسال زر الإرسال تلقائيًا ، بعد إرسال حدث النقر ، يتم تعيين OnSubmit على "ReturnFalse" ، سيكون التقديم التلقائي لزر الإرسال غير صالح.
بالنسبة للحالتين التاليتين ، يمكنك استخدام الجلسة لحل المشكلة. المبدأ هو وضع المعلومات في الجلسة عند تشغيل صفحة إضافة المعلومات ، ثم إرسال المعلومات إلى Servlet للمعالجة على الصفحة. يحصل Servlet على المعلومات في الجلسة. إذا كانت هناك معلومات في الجلسة غير فارغة ، فقم بإدخال المعلومات في قاعدة البيانات ، ثم قم بحذف المعلومات في الجلسة. المعلومات الموجودة في الجلسة فارغة في المرة التالية التي يتم فيها تقديم النموذج ، ولن يتم تنفيذ عملية المعلومات المخزنة.
ومع ذلك ، فإن استخدام الجلسة ببساطة له حدود ، لذلك في التطوير الفعلي ، يتم استخدامه بشكل عام لاستخدام الجلسة جنبا إلى جنب مع UUID لحل التقديمات المتكررة للنماذج. الرمز كما يلي:
حدد فئة UuidToken
الطبقة العامة uuidtoken {uuidtoken uuidtoken private = new uuidtoken () ؛ private uuidtoken () {} uuidtoken getUuidToken () {refere uuidtoken ؛} {requestsession ؛ uuidstr = uuid.randomuuid (). isuuidvalidate (httpservletrequest request) {// الحصول على جلسة httpsession الحالية = request.getSession (false) ؛ if (session == null) {return false ؛ htmlluuid = request.getParameter ("html.uuid") ؛ if (htmlluuid == null) {return false ؛ الجلسة = request.getSession (false) ؛ if (session == null) {return ؛} session.removeAttribute ("session.uuid") ؛}}أضف مجالًا مخفيًا إلى صفحة JSP ، واستخدم UUID لإنشاء رقم تعريف فريد ، وتعيينه إلى المجال المخفي ، ووضع رقم التعريف الفريد في نسخة من الجلسة. الرمز كما يلي:
<type type = "hidden" name = "html.uuid" value = '<٪ = uuidtoken.getuuidToken (). getUuidAsstr (request) ٪>'>
بعد الخضوع إلى servlet ، احصل على قيمة المجال المخفي لصفحة JSP ، وقارن قيمة المجال المخفي مع القيمة الموضوعة في الجلسة. إذا كان الأمر نفسه ، احفظ البيانات وحذف UUID من الجلسة. إذا لم يكن الأمر هو نفسه ، فهذا يعني أنه عرض متكرر ولا يتم إجراء أي معالجة.
العلم المنطقي = uuidtoken.getuuidtoken (). isuuidvalidate (request) ؛ if (flag) {// حفظ المعلومات إلى قاعدة البيانات // deued uuidtoken.getuuidtoken ()لخص
ما ورد أعلاه هو كل ما يتعلق بالمناقشة الموجزة لهذه المقالة حول استخدام الجلسة لمنع التقديمات المتكررة للنماذج. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!