قبل ذلك ، أكملنا منطق العمل المتعلق بفئات المنتجات ، ثم بدأنا في القيام بجزء المنتج المحدد.
1. قم بإنشاء الجداول في نماذج قاعدة البيانات والخريطة
أولاً ، نقوم بإنشاء جدول جديد في قاعدة البيانات ، ثم نستخدم الهندسة العكسية لرسم خريطة الجدول في فئة نموذج ، والجدول هو كما يلي:
/*================================================================= =====================================================================/ قم بإنشاء منتج جدول ( /* رقم المنتج ، النمو التلقائي* /ID int المفتاح الأساسي وليس الفار سواء أكان منتجًا موصى به ، فقد يتم عرضه على الصفحة الرئيسية لمول المركز التجاري */ التعليق ،/ *سواء كان منتجًا صالحًا ، فقد يتم عرضه على الصفحة الرئيسية للمركز التجاري */ Open Bool ،/ *يتم تحديد رقم الفئة للمنتج */ CID int ، قيود CID_FK VOIRIONAL KEY (CID) المراجع (المعرف)) ؛
لن أخوض في تفاصيل حول استخدام رسم الخرائط الهندسية العكسية إلى فئة النماذج. ذكرت سابقًا كيفية استخدام الهندسة العكسية لإنشاء النموذج.
2. أكمل طبقة الخدمة والهندسة المعمارية لفئة المنتج
2.1 بنية طبقة الخدمة لفئات المنتجات
مثل الفئة السابقة ، يحتاج المنتج أيضًا إلى الحصول على خدمة لتشغيل منطق الأعمال المتعلق بالمنتجات ، لذلك يتعين علينا كتابة إطار عمل Productservice و ProductServiceImpl ، وهو ما يلي:
// productservice interface ترث قواعد <torder> الواجهة العامة productervice يمتد BASESERVICE <TOMPORT> {} // ProducterViceImpl تنفذ ProducterviceImpl <roduct> فئة وريث BaseserviceImpl <Product> وتنفذ Productervice Interface ("productervice") 2.2 هيكل عمل فئات السلع
أولاً ، نحتاج إلى تحسين التعليقات التوضيحية على طبقة الخدمة في BaseAction
controller ("baseaction") scope ("النموذج الأولي") فئة عامة baseaction <T> يمتد إجراءات Actionuport requestaware ، sessionaware ، applicationaware ، modeldriven <t> {resource productervice productervice ؛ // تم حذف رمز آخر ، أو الكود الأصلي ...} ثم نكتب مجموعة منتج لروث الطريقة:
يمتد Order Productaction من الفئة العامة BASEACTION
في هذه المرحلة ، تم بناء بنية المنتج الخلفية للمنتج بشكل أساسي ، والخطوة التالية هي تحسين الوظائف المحددة ومنطق الأعمال.
3. أكمل الهيكل الأساسي لمكتب الاستقبال
الهيكل الأساسي لمكتب الاستقبال هو نفس الهيكل في فئة السلع. دعونا نلقي نظرة على المستندات المتاحة لفئة السلع النهائية:
نقوم أولاً بنسخ نسخة إلى مجلد المنتج بناءً على ملفات مكتب الاستقبال لفئة منتجه ، ثم نقوم بإجراء تغييرات مماثلة. دعنا نحلل العملية أولاً: أولاً ، index.jsp إلى Aindex.jsp عرض شريط القائمة على اليسار. عند النقر فوق إدارة الفئات ، أدخل صفحة الفئة/Query.JSP لعرض جميع معلومات فئة المنتج على اليمين. وظائف البحث والحذف موجودة في هذه الصفحة. ليست هناك حاجة لإقامة نافذة جديدة ، وإضافة نافذة Save.jsp المنبثقة ، ونافذة update.jsp. عند النقر فوق إدارة المنتج ، أدخل صفحة المنتج/Query.jsp لعرض جميع معلومات المنتج على الجانب الأيمن. يتم الانتهاء من وظائف البحث والحذف في هذه الصفحة. إضافة وتحديث save.jsp و update.jsp يطفو على التوالي. بعد ذلك ، سنقوم ببناء إطار كل صفحة ثم ملء الجزء المقابل.
أضف أولاً الرمز التالي في Aindex.jsp:
بعد ذلك ، نكممل إطار Query.JSP:
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01> stype/en" الهامش: 1px ؛ } .SearchBox {margin: -3 ؛ } </style> <script type = "text/javaScript"> $ (function () {$ ('#dg'). dataGrid ({// تغيير عنوان url إلى طريقة QueryJoIncategory في urd ur request url url: 'product_queryjoincategory.action' ، loadmsg: "تحميل ....... القيمة فارغة ، تشير إلى أننا نريد عرض جميع المنتجات تقوم بتكوين هذا الحقل ، لن يؤثر تغيير الصفحة على العناصر المحددة عند تحويل صفحة // شريط الأدوات ، إضافة ، حذف ، تحديث الأزرار وشريط أدوات مربع البحث: [{iconcls: 'icon-add' ، text: "إضافة منتج" ، معالج: function () {// إضافة رمز المشغل}} ، '-' ، // إضافة رمز TRIGGER}} ، '-' ، {iconcls: 'icon-remove' ، النص: 'حذف المنتج' ، المعالج: function () {// إضافة رمز المشغل}} ، '-' ، {// الزر Query ليس linkbutton ، إنه يحتوي على تصنيف ، ولكنه يدعم أيضًا علامة parsing html: name = 'ssrach' /> "}] ، rowstyler: function (index ، row) {console.info (" index " + index +" ، " + row) if (index ٪ 2 == 0) {return 'prouction-color: #fff ؛' ؛ } آخر {return 'background-color:#c4e1e1 ؛' ؛ }} ، frozencolumns: [[{field: 'checkbox' ، checkbox: true} ، {field: 'id' ، title: 'product number' ، width: 100}]] ، الأعمدة: [[{field: 'name' ، title: "اسم المنتج" ، العرض: 100} ، الوصف "، العرض: 100} ، {الحقل:" Xremark "، العنوان:" الوصف التفصيلي "، العرض: 100} ، {الحقل:" التاريخ "، العنوان:" وقت الإصدار "، العرض: 100} ، {الحقل: معطل = "حقيقي" "؛ } else {return "<input type = 'checkbox' upduped = 'true'" ؛ }}} ، {field: 'Open' ، title: 'facrod product' ، width: 100 ، formatter: function (value ، row ، index) {if (value) {return "<input type = 'checkbox' checked = 'checked' up uppled = 'true'" ؛ } else {return "<input type = 'checkbox' upduped = 'true'" ؛ }}} ، {field: 'category.type' ، title: 'form stypory' ، width: 200 ، //category.type هو فئة المنتج formatter: function (value ، row ، index) {if (row.category! = null &&category.type! = null) {return row.category.type ؛ // إذا لم تكن فئة المنتج فارغة ، فأرجع فئة المنتج} ell {return "هذا المنتج غير مصنف في الوقت الحالي" ؛ }}}]]}) ؛ // قم بتحويل مربع النص العادي إلى مربع نص البحث عن الاستعلام $ ('#ss'). SearchBox ({// Trigger Query Event Searcher: function (value ، name) {// value تمثل قيمة الإدخال // إضافة رمز الزناد} ، المطالبة: 'الرجاء إدخال الكلمة الأساسية البحث'}) ؛ }) ؛ </script> </head> <body> <table id = "dg"> </table> </body> </html> بعد ذلك ، نكممل طريقة QueryJoIncategory في OnderCtaction. قبل ذلك ، يجب علينا إكمال جزء الخدمة. سنقوم بتطويره ببطء من الطبقة السفلية:
// productervice interface interface interface productervice extres proseservice <product> {// Query Quary Information ، Cascading Cascadories Public List <Product> QueryJoIncategory (نوع السلسلة ، صفحة int ، حجم int) ؛ // الاستعلام باستخدام اسم المنتج // استعلام إجمالي عدد السجلات استنادًا إلى الكلمات الرئيسية Public GetCount (نوع السلسلة) ؛ } suppressWarnings ("Unchecked") service ("ProducterVice") تمتد الفئة العامة ProducterViceImpl على أساس BaseserviceImpl <Product> Productervice { @Override Public List <Terfort> QueryJoincategory (اسم السلسلة ، صفحة int) {string hql = "من المنتج p just just progory in in in in in in in in int. return getSession (). createquery (HQL) .SetString ("name" ، "٪" + name + "٪") .SetFirStresult (((صفحة 1) * الحجم) // show .setMaxResults (size) // show anist .list () ؛ } Override Public GetCount (اسم السلسلة) {String HQL = "SELECT COUNT (P) من المنتج P حيث P.NAME LISE: NAME" ؛ return (long) getSession (). createequery (HQL) .SetString ("name" ، "٪" + name + "٪") .Uniqueresult () ؛ // إرجاع سجل: إجمالي عدد السجلات}} يمكن الانتهاء من طريقة QueryJoIncategory في مجال المنتج:
controller ("ProductAction") scope ("prototype") تمتد Class Productaction Public BaseAction <TromeAction> {public string queryjoincategory () {system.out.println ("name:" + model.getName ()) ؛ System.out.println ("الصفحة:" + صفحة) ؛ System.out.println ("الصفوف:" + صفوف) ؛ // المستخدمة لتخزين pageMAP البيانات المليئة = new HashMap <string ، Object> () ؛ // استعلام البيانات المقابلة وفقًا للكلمات الرئيسية ومعلمات الترحيل قائمة <Tromprom> productlist = productervice.queryjoincategory (model.getName () ، الصفحة ، الصفوف) ؛ pagemap.put ("الصفوف" ، قائمة المنتج) ؛ // التخزين في تنسيق JSON // الاستعلام عن إجمالي عدد السجلات استنادًا إلى الكلمات الرئيسية الطويلة = productervice.getCount (model.getName ()) ؛ // التخزين بتنسيق JSON عودة "jsonmap" ؛ }} بعد ذلك ، قم بتكوينه في Struts.xml ، ونفس عملية فئة المنتج السابقة. من هنا ، يمكنك أن ترى أنه بعد تطوير واحدة ، سيكون التالي قريبًا:
<action name = "product_*" method = "{1}"> <result name = "jsonmap" type = "json"> <param name = "root"> pagemap </param> <param name = "arcoreproperties"> <!-صفوف [0]. لقطة الشاشة التالية من هذا الجزء-> </param> </srome> </action>وبهذه الطريقة ، يتم كتابة برنامج الخلفية ، ثم فتح Tomcat واختباره. عندما نضغط على إدارة المنتج في شريط القائمة على اليسار ، ستظهر النافذة التالية على اليمين:
وبهذه الطريقة ، أكملنا إطار نافذة إدارة المنتج.
العنوان الأصلي: http://blog.csdn.net/eson_15/article/details/51354932
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.