يتم الانتهاء من تطوير الإجراء عن طريق وراثة فئة ActionSupport. لا تقوم فئة Actionupport بتنفيذ واجهة الإجراء فحسب ، بل تضيف أيضًا دعمًا للتحقق والتوطين. الإجراءات المخصصة في التنمية الحقيقية تحتاج إلى ورث هذه الفئة. إضافة وظيفة التحقق من النموذج لتسجيل الدخول إلى المستخدم
دور فئة Actionupport:
لا يتطلب Struts2 فئة الإجراء التي صممناها لترث أي فئة من الفئة الأساسية أو الدعامات ، ولكن من أجل تسهيل تنفيذ أفعالنا الخاصة ، سنرث com.opensymphony.xwork2.actionsupport فئة في معظم الحالات ، وتجاوزت السلسلة العامة تنفيذ () طريقة الاستثناء في هذه الفئة. نظرًا لوجود العديد من الأعذار العملية في هذه الفئة ، يتم توفير العديد من الأساليب الافتراضية ، بما في ذلك أساليب المعلومات الدولية ، والطرق الافتراضية لمعالجة طلبات المستخدم ، وما إلى ذلك ، والتي يمكن أن تبسيط تطوير ACION بشكل كبير. في Struts2 ، عادة ما يتم استخدام الإجراء مباشرة لتغليف معلمات طلب HTTP. لذلك ، يجب أن تتضمن فئة الإجراء أيضًا سمات مقابلة لمعلمات الطلب ، وتوفير طرق Getter و Setter المقابلة للسمات.
إذن ما هو الفرق بين واجهة الإجراء وفئة Actionupport؟
واجهة العمل لها:
Success Final String Success = "Success" ؛ السلسلة النهائية الثابتة العامة none = "none" ؛ خطأ في السلسلة النهائية الثابتة العامة = "خطأ" ؛ سلسلة نهائية ثابتة = "تسجيل الدخول" ؛ السلسلة العامة تنفيذ () رمي الاستثناء ؛
يمكنك أن ترى أن هناك خمس ثوابت ثابتة وتنفيذ () مع سلسلة نوع الإرجاع
على أساس تنفيذ واجهة الإجراء ، تحدد فئة أداة دعم الإجراءات أيضًا طريقة التحقق (). إذا تم تجاوز الطريقة ، فسيتم تنفيذها قبل طريقة التنفيذ (). إذا فشل التحقق ، فسيتم نقله إلى المدخلات. يجب تكوين سمة الإدخال عند تكوين الإجراء.
بالإضافة إلى ذلك ، يوفر Actionupport أيضًا طريقة GetText (مفتاح السلسلة) ويدرك التدويل ، الذي يحصل على معلومات التدويل من ملفات الموارد.
وبهذه الطريقة ، عند تخصيص العلامة ، يمكنك تحديد متغير ككائن جديد لدعم الإجراءات لتحقيق التدويل.
فئة Actionupport لها (رمز المصدر):
تقوم إجراءات الطبقة العامة بتنفيذ الإجراءات ، القابلة للشفاء ، التحقق من الصحة ، textprovider ، localeprovider ، قابلة للتسلسل {logger static static static = loggerfactory.getLogger (Actionupport.class) ؛ setActionErrors (Collection <String> errormessages) {ValideAware.SetActionErrors (errormessages) ؛} المجموعة العامة <string> getActionErrors () {return valideaware.getActionRors () ؛ ValidationAware.getActionMessages () ؛}@collection PercatedPublic Collection <string> geterRormessages () {return getActionErrors () ؛}@derrecatedpublic map <string ، list <string>> geterrors () {return getFielderrors () ؛} public void setfielderrors (map <string> {ValideOwAware.setFielderRors (errorMap) ؛} الخريطة العامة <سلسلة ، قائمة <string >> getFielderRors () {return ValideAware.getFielderrors () ؛ {if (log.isdebugenabled ()) {log.debug ("سياق الإجراء غير تهيئة") ؛} إرجاع null ؛}} public boolean haskey (string key) {return getTextProvider (). atextName ، String defaultValue) {return getTextProvider (). getText (atextName ، defaultValue) ؛} السلسلة العامة getText (String atextName ، String defaultValue ، String Obj) {return getTextProvider (). {return getTextProvider (). getText (atextName ، args) ؛} السلسلة العامة getText (مفتاح السلسلة ، السلسلة [] args) {return getTextProvider (). getText (key ، args) ؛ DefaultValue ، args) ؛} السلسلة العامة getText (مفتاح السلسلة ، السلسلة defaultValue ، string [] args) {return getTextProvider (). getText (مفتاح ، defaultValue ، args) ؛ args ، stack) ؛} السلسلة العامة getText (مفتاح السلسلة ، السلسلة defaultValue ، string [] args ، valuestack stack) {return getTextProvider (). (conversionerrors.containskey (expr)) {string [] vals = (string []) conversionerrors.get (expr) ؛ return vals [0] ؛ Arrays.aslist (Val)) ؛}} ResourceBundle GetTexts () {return getTextProvider (). getTexts () ؛ {ValideAware.addDActeRor (anerrormessage) ؛} public void addactionMessage (سلسلة amessage) {ValidationAware.AddActionMessage (amessage) ؛} public void addfielderror (string fieldname ، errormessage) input ؛} السلسلة العامة dodefault () يلقي الاستثناء {return success ؛} السلسلة العامة execute () رمي الاستثناء {return success ؛} boolean hasactionerrors () التحقق من الصحة. {ValideAware.clearMessages () ؛} public void clearerrors () {ValidationAware.ClearerRors () ؛ super.clone () ؛} الإيقاف العام pUSE (نتيجة السلسلة) {} textProvider private getTextProvider () {if (textprovider == null) {textProviderfactory tpf = new textproviderfactory () ؛ if (container! هذا) يمكنك أن ترى أن هناك العديد من الطرق فيه ، لكن من الواضح أننا نرى أن هناك طريقة نعرفها جيدًا ، والتحقق من صحة () ، والتحقق من البيانات. من خلال هذه الطريقة ، يمكننا المطالبة عند تسجيل الدخول ، أو اسم المستخدم وكلمة المرور فارغة ، أو غيرها ...
أعط الآن مثالاً بسيطاً: عندما يكون اسم المستخدم وكلمة المرور فارغين ، امنح العميل موجهًا وديًا.
فيما يلي طريقتان لشرح وظيفة التحقق من البيانات من الدعامات 2.
1. التحقق من طريقة الترميز
1) يجب أن يكون الإجراء ورثًا من Actionupport
2) اكتب طريقة Void Void Validatexxx () من أجل فحص طريقة معالجة الطلب ، وتنفيذ التحقق من بيانات النموذج داخل الطريقة.
3) يمكنك أيضًا كتابة طريقة التحقق من الفراغ العام () لجميع طرق معالجة الطلبات.
4) في طريقة التحقق ، يمكنك إضافة رسالة خطأ التحقق من الحقل من خلال طريقة addFielderror ().
5) عندما يفشل التحقق ، سيقفز إطار الدعامات تلقائيًا إلى صفحة النتائج مع إدخال الاسم. في صفحة فشل التحقق ، يمكنك استخدام <s: fielderror/> لعرض رسائل الخطأ
6) بسيطة ومرنة. لكنها ليست قابلة لإعادة الاستخدام
أعد كتابة طريقة التحقق من صحة
1. الإجراء الذي كتبناه بشكل عام يرث ودعمة الإجراءات ، ولا يقوم Actionupport بتنفيذ واجهة الإجراء فحسب ، بل يقوم أيضًا بتنفيذ الواجهة الصالحة ، مما يوفر وظيفة التحقق من البيانات. حدد طريقة التحقق من صحة في الواجهة القابلة للشفاء ، وتجاوز الطريقة ، في حالة حدوث خطأ في حقل إدخال نموذج التحقق ، أضف الخطأ إلى حقل Fielderror لفئة Actionupport ، ثم إخراجها من خلال تعبير ognl.
فيما يلي واجهة التحقق من تسجيل الدخول إلى المستخدم:
<Body> <٪-معلومات التحقق من الإخراج-٪> <٪-إذا كنت تريد موجهًا واحدًا <s: fielderror fieldName = "uname"/>-٪> <٪-<s: property value = ""/>-٪> <div style = "color: red"> <s: fielderror/> </div> <s: form1 = Action = "logInValidateAction"> <s: div> الرجاء إدخال اسم المستخدم: <s: textfield name = "user.uname"> </s -٪> <s: debug> </s: debug> </body>
بعد إدخال المستخدم للبيانات ، أرسلها إلى LogInValidateAction:
الطبقة العامة logInValidateAction تعمل على توسيع ActionSupport التي تنفذ الإجراء {مستخدم المستخدم العام ؛ الخريطة العامة <string ، object> map ؛ // ستعمل طريقة التحقق على جميع الإجراءات Void public void () {if (user.getUname (). if (user.getupwd () {system.out.println (user.getUname ()) ؛ if (user.getUname (). يساوي ("admin") إدخال errorreturn ؛ // يجب أن يكون هذا input}}/*** @إعادة المستخدم*/المستخدم العام getUser () {return user ؛}/*** param user المستخدم لتعيين*/public void setUser (مستخدم المستخدم) {this.user = user ؛} تتجاوز فئة LogInValidateAction أعلاه طريقة التحقق من الصحة ، والتي سيتم تنفيذها قبل تنفيذ طريقة excute. إذا بعد تنفيذ الطريقة ، يحتوي FileDerror على فئة الإجراء على خطأ في التحقق من البيانات ، فسيتم إعادة توجيه الطلب إلى العرض المنطقي للإدخال.
تم تكوين struts.xml على النحو التالي:
<!-التحقق من البيانات-> <action name = "loginValidateAction"> <!-عندما تكون النتيجة هي "النجاح" ، القفز إلى صفحة Success.jsp-> <result name = "success"> success.jsp </sults> <!-عندما تكون النتيجة هي "خطأ" name = "login"> fail.jsp </redress> <result name = "ERROR"
الآثار على العميل:
ولكن هل لاحظت أنه عندما تتم مطالب الخطأ ، فإن هذا ليس التأثير الذي نريده.
هذا ليس ما نريد ، فكيف يمكننا تغييره؟ في الواقع ، هذا يوضح بشكل أساسي نمط موضوع Struts2 ،
لنلقي نظرة مرة أخرى:
يضيف أنماطنا تلقائيًا. يوفر Struts2 ثلاثة موضوعات ، Ajax ، Simple ، XHTML. انها الافتراضات لموضوع XHTML. بالطبع ، يمكنك كتابة أي من الموضوعات الخاصة بك ، والتي نسميها موضوعات مخصصة. يمكن حل المشكلات المذكورة أعلاه عن طريق وضعها
هناك طريقتان لحلها:
1. طريقة بسيطة (عملية أيضًا ، لجميع علامات Struts2) ، أضف السطر التالي من التعليمات البرمجية في Struts.xml.
<name constant = "struts.ui.theme" value = "Simple" />
وهذا يعني أن جميع الصفحات تستخدم السمة البسيطة. في هذا الوقت ، لا تضيف الصفحة التي تخرجها أي رمز غير ضروري ، مثل الجدول TR TD ، وما إلى ذلك ، ويمكننا تعديل نمط الصفحة مثل صفحات التحرير الأخرى.
لنلقي نظرة على تنسيق موجه الخطأ
يمكننا تعيين علامة مثل هذا:
<s: property value = "errors.uname [0]"/>
التعليق على هذه العلامة:
<div style = "color: red"> <s: fielderror/> </viv>
ولكن عندما نضعه مثل هذا ، سيحدث هذا التأثير.
يشبه هذا التأثير إلى حد ما المطالبة عندما ندخل عادة أخطاء ، وهناك قيم سمة أخرى ، لذلك لا نحتاج إلى سردها واحدًا تلو الآخر.
إطار التحقق مع Struts2
التحقق من تكوين XML.
ينفذ قبل الترميز.
1) لكي يتم التحقق من فئة الإجراء ، اكتب ملف قاعدة التحقق المسماة: اسم الفئة الإجراء ، validation.xml ضمن نفس الحزمة.
2) إضافة قواعد التحقق إلى ملف قاعدة التحقق: لأسماء أجهزة التحقق المحددة ، يرجى الرجوع إلى مرجع Struts2 أو API من Struts2.
أ) التحقق من المجال: قواعد للتحقق من كل حقل نوع غير المقتنيات في فئة الإجراء.
<name field = "اسم الحقل المراد التحقق منه"> <الحقل-فايساليراتور type = "تحقق من اسم المسطرة" القصيرة اذكر = "ما إذا كان يكون التحقق من المسار القصير (الافتراضي هو خطأ)"> <param name = "اسم المعلمة المراد استخدام
ب) التحقق غير المجال: استخدم تعبير ognl للتحقق التوافقي لبعض الحقول في فئة العمل.
<validator type = "fieldexpression"> <param name = "fieldname"> pwd </param> <param name = "fieldname"> pwd2 </param> <param name = "expression"> <!
ج) التحقق من الزوار: يتم استخدامه بشكل أساسي للتحقق من حقل النوع المخصص في فئة الإجراء. (لاستخدام الوضع الذي يحركه النموذج)
ط) استخدم قواعد التحقق من الزوار لحقل النوع المخصص في ملف قواعد التحقق لفئة الإجراء.
<!-استخدم التحقق من الزوار للحقل المخصص-> <field name = "user"> <field-validator type = "required" short-circuit = "true"> ussage معلومات مطلوبة </message> <!-prefix message-> </field-validator> <field-validator type = name = "context"> USERCONTEXT </param> <!-حدد اسم السياق للتحقق من هذا الزائر-> <param name = "appendprefix"
2) اكتب ملف قاعدة التحقق لحقل الزائر. اسم الملف هو: اسم حقل الزوار [اسم السياق التحقق من Visitor] -validation.xml. على سبيل المثال: اسم الملف في هذا المثال هو user-usercontext-venidation.xml
ملاحظة: يجب تخزين هذا الملف في الحزمة حيث يوجد نوع حقل الزائر.
(3) إضافة قواعد التحقق من الحقل ليتم التحقق منه في ملف قاعدة التحقق من حقل الزائر.
يمكننا أيضًا تنفيذ التحقق من البيانات عن طريق إضافة ملف تكوين التحقق دون إعادة كتابة طريقة التحقق من صحة. يكمل ملف تكوين التحقق هذا التحقق من حقل النموذج باستخدام جهاز التحقق الحالي في Struts2. هنا ، خذ جهاز التحقق المطلوب كمثال. جهاز التحقق هذا هو جهاز التحقق المطلوب يحدد أنه يجب إدخال حقل نموذج معين.
فيما يلي طريقة الكتابة لـ LogInValidateAction-Validation.xml من ملف تكوين التحقق هذا:
<؟ type = "requiredString"> <message> لا يمكن أن يكون اسم المستخدم فارغًا </message> </ name = "minlength"> 6 </param> <message> يجب أن يكون طول المقطع بين $ {minlength}-$ {maxLength} بتات </message> </field-validator> </field> </adadors> ملاحظة: يجب أن يتوافق ملف تكوين التحقق هذا للقاعدتين التاليتين:
1. يجب أن يكون تنسيق مصير الملف اسم فئة الإجراء -validation.xml. على سبيل المثال ، في هذا المثال ، اسم الملف هو: loginValidateAction- Venidation.xml
2. يجب أن يكون الملف في نفس المسار مثل ملف الفئة لفئة الإجراء. في هذا المثال ، الملف موجود
لا يزال رمز فئة LogInValidateAction هو نفسه:
الطبقة العامة logInValidateAction تعمل على توسيع ActionSupport التي تنفذ الإجراء {مستخدم المستخدم العام ؛ الخريطة العامة <string ، object> map ؛ // ستعمل طريقة التحقق على جميع الإجراءات Void public void () {if (user.getUname (). if (user.getupwd () {system.out.println (user.getUname ()) ؛ if (user.getUname (). يساوي ("admin") إدخال errorreturn ؛ // يجب أن يكون هذا input}}/*** @إعادة المستخدم*/المستخدم العام getUser () {return user ؛}/*** param user المستخدم لتعيين*/public void setUser (مستخدم المستخدم) {this.user = user ؛}ما ورد أعلاه هو وظيفة التحقق من البيانات 2 Struts 2 وحل مشكلة التحقق التي أدخلها المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!