في المقالة الأخيرة ، أكملنا عرض بيانات DataGrid لبيانات JSON ، لكن لم يكن مرتبطًا بالخلفية. لقد عرضنا ببساطة بيانات JSON التي صنعناها أنفسنا. في هذا القسم ، قمنا بدمج JSON و Struts2 لتوصيل التفاعل بين Easyui و Struts2.
1. بناء بيئة JSON
بيئة JSON بسيطة للغاية ، فقط استيراد حزمة JSON JAR ، على النحو التالي:
(ملاحظة: عنوان تنزيل حزمة JSON-LIB-2.4:
2. تحسين العمل
هناك خاصية في عنصر التحكم في بيانات DataGrid والتي يمكن أن تحدد عنوان URL للبيانات المطلوبة. في القسم السابق ، قمنا بتعيين هذا العنوان مباشرة على ملف JSON معين. هنا قمنا بتعيين عنوان URL هذا على إجراء ما ، مثل عنوان URL: "category_queryjoinact.action" ، مما يعني أنه سيتم طلب طريقة QueryJoIncAction الخاصة بالفئة (سيتم إعطاء مدونة Query.jsp في نهاية المقالة). لذلك نحن بحاجة إلى إكمال طريقة QueryjoinAccount في الفئة.
قبل دمج Struts2 و JSON ، دعونا نلقي نظرة على الطلبات التي تم إرسالها لبيانات JSON المعروضة من قبل:
نظرًا لأن النوع هو خاصية لفئة الفئة ، فقد قمنا بتنفيذ واجهة <CustyDrived <Custry> في BaseAction ، لذلك سيتم تغليف هذا النوع في النموذج. لا داعي للقلق بشأنه ، يمكننا الحصول عليه من خلال النموذج. ومع ذلك ، نحتاج إلى الحصول على معلمات الصفحة والصفوف التي يتم إرسالها تلقائيًا بواسطة EasyUI ، حتى نتمكن من إضافة صفحة متغيرين من الأعضاء والصفوف إلى Basemodel وتنفيذ أساليب GET والتعيين. أخيرًا ، نحتاج إلى النظر في شيء واحد. بعد الحصول على كل هذه المعلمات ، نستفسر عن البيانات في قاعدة البيانات بناءً على هذه المعلمات. إذن أين نضع البيانات التي وجدناها؟ يجب أيضًا تعبئتها في تنسيق JSON وإرسالها إلى مكتب الاستقبال قبل أن يتم عرضها بواسطة DataGrid. لا نفكر في كيفية حزم بيانات الاستعلام بتنسيق JSON. نفكر أولاً في وضع هذه البيانات في مكان واحد. من الطبيعي التفكير في استخدام الخريطة ، لأن البيانات بتنسيق JSON في شكل قيمة رئيسية. بالتفكير في هذا ، نواصل تحسين BASEACTION:
controller ("baseaction") scope ("النموذج الأولي") فئة عامة BASEACTION <T> يمتد إجراءات ACTORITIONS UPEREMENTSAWARE ، SESSATIONAWARE ، Applicationaware ، ModelDRIVE <T> {// page والصفوف ترتبط بالتعبير. يقوم Pagemap بتخزين بيانات الاستعلام ، ثم يقوم بتجميعها في تنسيق JSON. // الصفحة والصفوف لتنفيذ الأساليب GET وضبط. يحتاج Pagemap فقط إلى تنفيذ طريقة GET ، لأن PageMap لا يتلقى معلمات الواجهة الأمامية ، ولكنه صفحة عدد صحيح محمي ؛ صفوف عدد صحيح محمي. الخريطة المحمية <string ، object> pageMap = null ؛ // اترك الإجراءات المختلفة تنفيذها بنفسها // حذف الأساليب وتعيينها .../************************* الاتجاهات التالية لا يزال الجزء الأصلي baseaction ***************************************************** Resource محمية الحسابات الحسابات الخدمات ؛ // كائن المجال الخريطة المحمية <string ، Object> request ؛ الخريطة المحمية <سلسلة ، كائن> جلسة ؛ الخريطة المحمية <string ، Object> Application ؛ Override public void setapplication (Map <String ، Object> application) {this.application = application ؛ } Override public void setSession (Map <String ، Object> Session) {this.session = session ؛ } Override public void setRequest (Map <String ، Object> request) {this.request = request ؛ } // modeldriven modern todern ؛ Override public t getModel () {parameterizedType type = (parameterizedType) this.getClass (). getGenericSuperClass () ؛ class clazz = (class) type.getActualTyPearguments () [0] ؛ حاول {model = (t) clazz.newinstance () ؛ } catch (استثناء e) {رمي new runTimeException (e) ؛ } نموذج الإرجاع ؛ }} حسنًا ، بعد تحسين BaseCategory ، يمكننا كتابة طريقة QueryJoincact في الفئة. نقوم بحذف جميع الطرق الأصلية في الفئة ، لأن تلك كانت تستخدم للاختبار عند بناء البيئة من قبل ، ولم تعد هناك حاجة إليها. الآن بدأنا بالفعل رمز المشروع:
controller ("CategoryAction") scope ("prototype") فئة الفئة العامة يمتد BASEACTION <Category> {public String QueryJoInAccount () {// المستخدمة لتخزين بيانات PageMap Paging = new hashmap <string ، Object> () ؛ // الاستعلام عن البيانات المقابلة بناءً على الكلمات الرئيسية ومعلمات الترحيل. لقد كتبنا هذه الطريقة في الخدمة. في ذلك الوقت ، أكملنا قائمة الاستعلام المتتالية <Category> catevorylist = categoryservice.queryjoinAccount (model.gettype () ، page ، rows) ؛ pagemap.put ("الصفوف" ، الفئة) ؛ // مخزنة في شكل JSON. من ملف JSON في القسم السابق ، يمكن ملاحظة أن المفتاح إجمالي ومفتاح صفوف. هنا نقوم بتخزين الصفوف أولاً. // الاستعلام عن العدد الإجمالي للسجلات بناءً على الكلمات الرئيسية طويلة = categoryservice.getCount (model.gettype ()) ؛ // لم تتم كتابة هذه الطريقة ، دعنا نذهب إلى طبقة الخدمة لتحسينها لاحقًا // system.out.println (Total) ؛ pagemap.put ("Total" ، Total) ؛ // تخزينه بتنسيق JSON ، ثم قم بتخزين إجمالي الإرجاع "JSONMAP" ؛ }} بهذه الطريقة ، كتبنا الإجراء. الآن يحصل الإجراء على المعلمات المرسلة من مكتب الاستقبال ، ثم يستكشف إجمالي عدد السجلات للنوع المحدد وجميع منتجات النوع المحدد وفقًا للمعلمات. يتم تخزينه وفقًا للمفاتيح المحددة في JSON (أي المجموع والصفوف) ووضعها في هاشماب. بعد ذلك ، طالما تم تعبئة البيانات الموجودة في هذا hashmap في تنسيق JSON وإرسالها إلى مكتب الاستقبال ، يمكن عرضها بواسطة DataGrid. لقد وضعنا أولاً هذا hashmap ، وتحسين رمز طبقة الخدمة أولاً ، ثم قم بتعبئة البيانات في هذا hashmap.
3. تحسين الخدمات
من الفئة أعلاه ، يمكننا أن نرى أنه يجب إضافة طريقة getCount إلى خدمة الفئة ، ويجب تنفيذها في فئة التنفيذ المحددة ، على النحو التالي:
// CategoryService Interface Interface Interface Interface ExplySevice Expressservice <category> {// query quary information ، stailing administrator list <Category> QueryJoinAccount (نوع السلسلة ، صفحة int ، حجم int) ؛ // الاستعلام باستخدام اسم الفئة // الاستعلام عن العدد الإجمالي للسجلات استنادًا إلى الكلمات الرئيسية public getCount (نوع السلسلة) ؛ }. c.type مثل: النوع "؛ Return GetSession (). CreateAquery (HQL) .SetString ("type" ، "٪" + type + "٪") .setFirStresult (((صفحة 1) * الحجم) // إظهار من الأول. } Override Public GetCount (نوع السلسلة) {String HQL = "حدد العد (C) من الفئة C حيث C.Type مثل: type" ؛ return (long) getSession (). createquery (HQL) .SetString ("type" ، "٪" + type + "٪") .Uniqueresult () ؛ // إرجاع سجل: إجمالي عدد السجلات}} حتى الآن ، تم فتح مسار الحصول على البيانات في قاعدة البيانات هذه. تم الانتهاء من الخطوتين الأوليين لاسترداد البيانات من قاعدة بيانات مكتب الاستقبال-> ، ثم نبدأ في حزم البيانات المخزنة في HashMap ثم إرسالها إلى مكتب الاستقبال.
4. تكوين Struts.xml
تغليف يمكن إكمال البيانات المحددة من خلال التكوين في Struts.xml. دعونا أولاً نلقي نظرة على التكوين في Struts.xml:
<struts> <name constant = "struts.devmode" value = "true"/> <package name = "Shop" extends = "json-default"> <!-jason-default يرث Struts-default-> <global-results> <result name = "aindex"> web-inf/main/aindex. تم تكوينه في الربيع ، لأنه يجب تسليمه إلى إدارة الربيع-> <action name = "category_*" method = "{1}"> <!-يجب إضافة حزمة JSON أولاً ، ثم ترث البيانات json-default أعلاه-> <result name = "jsonmap" type = "json"> <! تصفية الخيارات غير الضرورية ، ودعم التعبير العادي json تنسيق: {Total: 3 ، الصفوف: [{account: {id: 2 ، login: "user" ، name: "customer service a" ، pass: علة في CSDN ، سأتبع الصورة وأضعها أدناه-> </param> </result> </action> <Action Name = "account_*" method = "{1}"> <result name = "index" name = "send">/web-inf/{1}/{2} .jsp </redress> </usace> </package> </struts>من التكوين أعلاه ، يمكننا أن نرى ذلك أولاً وقبل كل شيء ، يجب أن ترث الحزمة JSON-Default ، لأن JSON-DEFAULT ترث الدعامات ، لأن هناك Struts2-JSON-PLUGIN-2.3.24.1.JAR في حزمة JSON JAR. يمكنك فتحه ومعرفة أن هناك struts-plugin.xml في الداخل. يمكنك فتحه ورؤية أن Json-Default يرث الدعامات الدائرية:
بعد ذلك ، أقوم بتكوين <stred> ، الاسم هو السلسلة التي يتم إرجاعها فقط عن طريق الإجراء ، ويجب أن تتم مطابقة النوع في JSON. ثم هناك المعلمات في النتيجة. بادئ ذي بدء ، المعلمة التي يجب أن تتوافق مع الاسم كجذر. يجب أن تتم مطابقة هذه المعلمة في كائن hashmap الذي يجب تحويله الآن ، أي pagemap التي حددناها. مع تكوين هذه المعلمة ، ستقوم الدعامات بتعبئة البيانات الموجودة في PageMap في تنسيق JSON. ثم تكوين القائمة السوداء. تعني القائمة السوداء إخبار الدعامات التي لا تحتاج إلى تعبئة الحقول عند التعبئة ، مثل معلومات حول كلمات مرور المسؤول. من تنسيق Jason في التعليق أعلاه ، يمكنك أن ترى أن الصفوف [0] .Account.pass يمثل حقل كلمة المرور ، ولكن يجب أن يكون هناك أكثر من بيانات واحدة ، لذلك يتعين علينا استخدام تعبيرات منتظمة لتمثيلها ، بحيث لا يتم تعبئة جميع كلمات المرور في JSON.
5. تعديل محتوى Query.JSP
في هذه المرحلة ، قمنا بتعبئة البيانات في تنسيق JSON. بعد ذلك ، سنقوم بتحسين محتوى الاستعلام الأمامي.
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <seg@ includ@ include/head. $ (function () {$ ('#dg'). dataGrid ({// عنوان url يتم تغييره لطلب url url url: 'category_queryjoinact.action' ، loadmsg: "تحميل ...... ' Striped: True ، Nowrap: True ، Singleselect: True ، True ، Rowstyler: Function (index ، {return 'background: #fff ؛ {الحقل: "مربع الاختيار" ، مربع الاختيار: TRUE} ، {الحقل: "معرف" ، العنوان: "الرقم" ، العرض: 200} // يجب أن تكون حقول الحقل هنا هي نفسها الموجودة في قاعدة البيانات ، أي ، يجب أن تكون هي تلك الموجودة في بيانات JSON ، "<span>" + value + "</span>" ؛ }} ، {field: 'hot' ، title: 'hot' ، width: 100 ، // field hot formatter: function (value ، row ، index) {if (value) {// if reg ، القيمة صحيحة ، والقيمة هي إرجاع متغير boolean "<type type = 'checkbox' // tick} else {return "<input type = 'checkbox' disable = 'true'" ؛ // لا تحقق}}} ، {field: 'account.login' ، title: 'Administrator' ، width: 200 ، //account.loginadministrator name name formatter: function (row ، index) {if (row.account! = null && row.Actount.login! = null) // إذا لم يكن اسم تسجيل الدخول فارغًا ، فاعرض اسم تسجيل الدخول} آخر {return "لا يوجد مسؤول في هذه الفئة" ؛ }}}]]}) ؛ }) ؛ </script> </head> <body> <table id = "dg"> </table> </body> </html> 6. الاختبار يظهر النتائج
أخيرًا ، دعنا نختبر نتائج عرض DataGrid ، على النحو التالي:
في هذه المرحلة ، نجحنا في دمج Struts2 و JSON ، والآن يمكننا نقل البيانات بتنسيق JSON إلى المقدمة.
(ملاحظة: في النهاية ، سأقدم تنزيل الكود المصدري للمشروع بأكمله! الجميع مرحب بهم لجمع أو مشاركة)
العنوان الأصلي: http://blog.csdn.net/eson_15/article/details/51332758
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.