مقدمة
لماذا نوع المحول في Struts2؟
: يمكن أن يوفر Struts2 فقط تحويل تلقائي لـ 8 أنواع أصلية في Java وأنواع شائعة مثل السلسلة والتاريخ.
ولكن هذا بالتأكيد لا يمكن أن تلبي احتياجاتنا إذا أردنا دمج بيانات الصفحة في جافابان. عندما تذهب إلى العمل ، فإن الإجراء الذي يحصل عليه هو كائن ، لذلك يتطلب هذا المطلب منا استخدام محول النوع.
في معظم الأوقات ، يمكن أن يلبي استخدام محول النوع المدمج ومحول النوع ognl المقدم من إطار STRUTS2 معظم احتياجات تحويل النوع ؛ ومع ذلك ، هناك بعض الحالات الخاصة التي قد تحتاج فيها سلسلة من التنسيق المحدد إلى تحويلها إلى كائن مركب ، ومحول نوع مخصص مطلوب. على سبيل المثال ، إذا أرسل العميل سلسلة مثل "Jelly | 123456" إلى الخادم ، فنحن بحاجة إلى تحويل هذه السلسلة إلى مثيل نوع المستخدم ، مع "Jelly" كاسم المستخدم و "123456" ككلمة مرور المستخدم.
فئة تحويل النوع المخصص
هناك صفحة مكتب استقبال مثل هذا:
<form action = "login" method = "post"> المستخدم: <input type = "text" name = "userInfo"> <br> <input type = "submit" value = "convert"> </form>
رمز الإجراء المقابل هو:
مستخدم خاص للمستخدم ؛ // هذا هو نوع مركب من النوع الخاص بالسلسلة الخاصة ؛ setUsers public void (مستخدم المستخدم) {this.user = user ؛} المستخدم العام getUser () {return user ؛}نأمل أن يدخل المستخدم سلسلة في الصفحة الأمامية بتنسيق "اسم المستخدم | كلمة المرور" ويحول السلسلة بتنسيق "اسم المستخدم | كلمة المرور" إلى نوع المستخدم من خلال محول النوع المخصص. دعنا نتحدث عن كيفية تنفيذ محول نوع مخصص.
لا يزال محول نوع Struts2 يعتمد في الواقع على إطار OGNL. هناك واجهة typeconverter في مشروع ognl ، وهو الواجهة التي يجب تنفيذها بواسطة محول نوع مخصص. رمز تعريف هذه الواجهة كما يلي:
// ognl يوفر واجهة عامة typeconverter {الكائن العام convertValue (سياق الخريطة ، هدف الكائن ، عضو العضو ، خاصية السلسلة ، قيمة الكائن ، فئة totype) ؛}لتنفيذ محول نوع ، يجب عليك تطبيق typeconverter أعلاه ، ولكن الأساليب الموجودة في الواجهة أعلاه معقدة للغاية ، وبالتالي يوفر مشروع ognl أيضًا فئة تنفيذ لهذه الواجهة: DefaultTyPeconverter ، والتي تستخدم عادةً هذه الفئة لتنفيذ محولات النوع المخصص. يتطلب تنفيذ محول النوع المخصص تجاوز طريقة ConvertValue لفئة DefaultTyPeconverter.
فيما يلي تحويل فئة التحويل إلى مثيل فئة المستخدم:
يمتد USERCONVERTER الفئة العامة defaulttypeconverter {الكائن العام ConvertValue (سياق الخريطة ، قيمة الكائن ، فئة totype) {if (totype == user.class) {// عندما تحتاج إلى تحويل سلسلة إلى نوع المستخدم // معلمة طلب النظام هي سلسلة صفيف سلسلة [] params = (string []) ؛ // إنشاء مستخدم مثيل مستخدم = مستخدم جديد () ؛ // فقط معالجة عنصر الصفيف الأول من صفيف المعلمة طلب ، وقسم السلسلة إلى سلسلتين مع "|" سلسلة الرمز [] uservalues = params [0] .Split ("// |") ؛ // تعيين قيمة لمثيل المستخدم user.setName (uservalues [0]) ؛ user.setPassword (uservalues [1]) ؛ إرجاع المستخدم ؛ } آخر إذا (totype == string.class) {// عندما يكون من الضروري تحويل نوع المستخدم إلى مستخدم مستخدم سلسلة = (المستخدم) ؛ إرجاع "<" + user.getName () + "|" + user.getPassword () + ">" ؛ } إرجاع فارغ ؛ }}وظيفة طريقة ConvertValue بسيطة للغاية. هذه الطريقة هي المسؤولة عن إكمال تحويل النوع ، ولكن هذا التحويل ثنائي الاتجاه. يتم الحكم على النوع المستهدف بناءً على المعلمة totype ، ثم يمكننا تنفيذ منطق التحويل في اتجاهين.
سجل محول النوع
إن وجود محول نوع ليس كافيًا ، لأن إطار عمل Struts2 لا يعرف متى يستخدم محولات النوع هذه ، لذلك يجب تسجيل محول النوع في تطبيق الويب ، بحيث يمكن لـ STRUTS2 استخدام محول هذا النوع بشكل طبيعي.
يدعم Struts2 بشكل أساسي الطريقتين التاليتين لتسجيل محولات النوع:
دعنا نتحدث عن طريقتين أعلاه لتسجيل محولات النوع.
محول النوع المحلي
يتيح Struts2 للمطورين تحديد معلومات التكوين لتحويل النوع من خلال ملفات تحويل النوع المحلي. ملف تحويل النوع هو ملف خصائص عادية (*.properties). يجب أن يكون اسم ملف ملف تحويل النوع المحلي في النموذج ActionName -Conversion.Properties ، حيث يكون ActionName هو اسم الإجراء الذي يجب تحويله إلى الملف باستخدام هذا النوع ، وسلسلة -Propervies التالية. يجب وضع ملف تحويل النوع في نفس موقع ملف فئة الإجراء.
بعد الحديث عن ملف تحويل النوع المحلي ، دعنا نستمر في الحديث عن محول النوع المحلي المسجل. لتسجيل محول نوع محلي ، تحتاج فقط إلى إضافة سطر التكوين التالي إلى ملف محول النوع المحلي:
<PropName> = <ConversterClass>
استبدل ما ورد أعلاه <PropName> بالخاصية التي يجب تحويلها إلى النوع ، واستبدل <ConversLclass> بفئة التنفيذ من محول النوع. بالنسبة لفئة UserConverter التي تم تنفيذها أعلاه ، من الضروري تكوينه في ملف تحويل النوع المحلي على النحو التالي:
# لتحديد سمة المستخدم ، تحتاج إلى استخدام فئة USERCONVERTE
محول النوع العالمي
تعد قيود محولات النوع المحلي واضحة للغاية ، ولا يمكنها العمل إلا على إجراءات محددة وخصائص محددة. ومع ذلك ، إذا كانت إجراءات متعددة في التطبيق تحتوي على سمات لنوع المستخدم ، أو يحتوي إجراء واحد على سمات لنوع المستخدم المتعدد ، فسيكون من الأنسب استخدام محول النوع العالمي.
لا يعمل محول النوع العالمي على الخصائص المحددة للإجراء المحدد ، ولكن على النوع المحدد. على سبيل المثال ، يعمل لجميع خصائص Type Com.JellyThink.practise.user.
يجب أن يوفر تسجيل محول النوع العالمي ملفًا لـ XWORK-CONVERSION.Properties ، وهو ملف محول النوع العالمي. تحتاج إلى وضع الملف مباشرة تحت مسار الويب/الفئات على تطبيق الويب.
يتكون محتوى ملف تحويل النوع العالمي من عناصر <Proftype> = <Nudtenclass> المتعددة. استبدل proptype بالنوع الذي يجب تحويله ، واستبدال ConvertClass بفئة التنفيذ من محول النوع. بالنسبة لفئة UserConverter التي تم تنفيذها أعلاه ، من الضروري تكوينه في ملف تحويل النوع العالمي على النحو التالي:
com.jellythink.practise.user = com.jellythink.practise.userconverter
"محلي" مقابل "عالمي"
يمكن تحويل النوع المحلي فقط تحويل السمة المحددة للإجراء المحدد. بغض النظر عما إذا كانت سمة الإجراء عبارة عن صفيف أو نوع مجموعة ، فإن طريقة تحويل المحول تحول السمة إلا مرة واحدة. إذا كان لإجراء قائمة <Serpark> مستخدم خاصية ، فسيقوم محول النوع المحلي باستدعاء طريقة ConvertValue () مرة واحدة فقط ، والتي تحول المعلمة طلب المستخدمين إلى قائمة Collection <Sether> في وقت واحد.
سيقوم محول النوع العالمي بتحويل جميع أنواع الإجراءات المحددة. إذا كانت سمة الإجراء عبارة عن مجموعة أو نوع تجميع ، وكان عنصر التجميع أو عنصر التجميع هو الطريقة التي تتطلب من المحول تحويلها ، فلن يقوم محول النوع العالمي بتحويل سمة المجموعة بالكامل ، ولكنه سيقوم بتحويل كل عنصر من عناصر SET. أي عندما تكون السمة عبارة عن صفيف أو مجموعة ، فإن المجموعة أو المجموعة تحتوي على عدة عناصر من النوع ، ثم سيتم استدعاء طريقة ConvertValue () عدة مرات.
بعد التعرف على الفرق بين الاثنين ، سأولي المزيد من الاهتمام له في عملي المستقبلي ؛ لا سيما الفرق بين الصفيف وضبط العناصر عند تحويلها.
محول النوع المخصص بناءً على Struts2
يقدم ما ورد أعلاه اتجاه التحويل عن طريق وراثة فئة DefaultTyPeconverter ، في طريقة تحويل Value ، يتم الحكم على اتجاه التحويل عن طريق الحكم على معلمة Totype ، ثم يتم تنفيذ منطق التحويل لاتجاهات التحويل المختلفة بشكل منفصل. في إطار STRUTS2 ، من أجل تبسيط تنفيذ محولات النوع ، يتم توفير فئة مجردة StrutStypEconverter خصيصًا ، وهي فئة فرعية لفئة DefaultTyPeconverter. لقد نفذت طريقة ConvertValue لفئة DefaultTyPeconverter ؛ عند تطبيق هذه الطريقة ، فإنه يحول التحويل في اتجاهين مختلفين عن طريق الحكم على معلمة totype في طريقة ConvertValue إلى استدعاء طريقتين مختلفتين مختلفتين:
ما يتعين علينا القيام به هو أن يرث فئة التجريدية StrutStypeConverter وتنفيذ الطريقتين التجريدين: ConvertFromString و ConvertToString.
الرمز المعدل كما يلي:
يمتد USERCONVERTER الفئة العامة strutstypeConverter {الكائن العام convertFromString (سياق الخريطة ، القيم سلسلة [] ، فئة tocclass) {user user = new user () ؛ سلسلة [] uservalues = القيم [0] .Split ("// |") ؛ user.setName (uservalues [0]) ؛ user.setPassword (uservalues [1]) ؛ إرجاع المستخدم ؛ } السلسلة العامة ConvertToString (سياق الخريطة ، الكائن O) {// عندما يكون من الضروري تحويل نوع المستخدم إلى مستخدم مستخدم سلسلة = (مستخدم) O ؛ إرجاع "<" + user.getName () + "|" + user.getPassword () + ">" ؛ }}لخص
تلخص هذه المقالة محول النوع المخصص في Struts2 بالتفصيل ، والفكرة الكلية هي كما يلي:
فقط بضع خطوات لإنجاز محول النوع المخصص.
حسنًا ، ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.