نصائح التنفيذ

يتناول هذا القسم بعض النصائح التي ستساعدك في كتابة عمليات تنفيذ أكثر تعقيدًا للمكتبة:

استخدام الخدمة الخاصة بك

يتم تنفيذ أبسط عمليات تنفيذ لمصدر بيانات من فئة DataSourceServlet للمكتبة. للتوسّع من صف آخر غير DataSourceServlet، يجب تنفيذ مصدر بيانات على النحو التالي:

  1. تنفيذ واجهة DataTableGenerator وإلغاء getCapabilities() وgenerateDataTable().
  2. اتصل بـ DataSourceHelper.executeDataSourceServletFlow() من داخل شفرة سيرفل الخاصة بك لتشغيل تدفق مصدر البيانات.وتعتمد هذه الطريقة على المعلَمات التالية:
    • الكائن HttpServletRequest.
    • الكائن HttpServletResponse.
    • تطبيق واجهة DataTableGenerator من الخطوة 1 أعلاه.
    • قيمة منطقية لتحديد وضع الوصول المقيّد أو غير المقيَّد.

على سبيل المثال، إذا كنت ترغب في اكتساب لغة servlet من فئة servlet أخرى، تُسمّى AuthServlet وتوفّر مصادقة مضمّنة، يمكنك إعادة كتابة SimpleServletExample لاكتساب AuthServlet بدلاً من DataSourceServlet على النحو التالي:

  1. تنفيذ واجهة DataTableGenerator.
  2. انقل العلامة generateDataTable() من طريقة التنفيذ DataSourceServlet إلى عملية التنفيذ باستخدام DataTableGenerator.
  3. يمكنك إلغاء getCapabilities() في تنفيذ DataTableGenerator لإرجاع Capabilities.None.
  4. اتصل بـ DataSourceHelper.executeDataSourceServletFlow() من داخل رمز servlet (doGet() أو doPost())، واجتاز تنفيذ DataTableGenerator. وتعمل هذه الطريقة على تشغيل التدفق الكامل لمصدر البيانات، بما في ذلك عرض نتائج مصدر البيانات في استجابة servlet.

يمكنك استخدام نفس الأسلوب إذا كنت تستخدم إطار عمل servlet حيث تكتسب فيه عادةً فئة مجردة يوفرها إطار العمل. على سبيل المثال، إذا كنت تستخدم WebWork، فقد ترغب في اكتساب فئة ActionSupport.

تعريف الإمكانيات

إذا كان مخزن البيانات يحتوي على كمية كبيرة من البيانات، وترغب في زيادة كفاءة مصدر البيانات، يمكنك استخدام إمكانات طلب البحث في مخزن البيانات. على سبيل المثال، لنفترض أن مخزن البيانات عبارة عن قاعدة بيانات، وأن قاعدة البيانات تحتوي على عدد كبير من الأعمدة. وإذا كان التمثيل البصري يتطلّب عددًا قليلاً فقط من هذه الأعمدة، يكون تشغيل عملية SELECT في قاعدة البيانات أكثر فعالية من استرداد جميع الأعمدة واستخدام إمكانيات الاستعلام عن المكتبة لتنفيذ SELECT. لتنفيذ إمكانيات SELECT، يجب كتابة رمز لتنفيذ عملية SELECT داخل قاعدة البيانات وعرض جدول بيانات.

استخدم التعداد Capabilities لتحديد إمكانيات الاستعلام التي توفرها شفرتك. الخيارات المتاحة هي:

  • NONE: بشكل افتراضي، لا تقدم الشفرة أي عمليات استعلام.
  • SQL: يوفر الرمز عمليات استعلام SQL.
  • SORT_AND_PAGINATION: توفّر شفرتك عمليات طلب ترتيب وتقسيم على صفحات.
  • SELECT: يقدم الرمز عملية محددة.
  • ALL: يوفر شفرتك SQL وSORT_AND_PAGINATION وSELECT من العمليات.

ملاحظة: في جميع الحالات، تعالج المكتبة أي عمليات طلب بحث لا توفّرها شفرتك.

لتنفيذ إمكانية أخرى غير NONE، يمكنك إلغاء Capabilities.getCapabilities()وتنفيذ DataTable.generateDataTable() للاستعلام عن مخزن البيانات وعرض جدول بيانات.

ثلاثة أمثلة توضّح كيفية تنفيذ الإمكانيات: AdvancedExampleServlet وAdvancedExampleServlet2 وSqlDataSourceServlet. كلها في حزمة example. تمت مناقشة AdvancedExampleServlet2 في تعريف الإمكانات وتدفق الأحداث.

تخصيص تدفق الأحداث

يتم تحديد التدفق التلقائي للأحداث في DataSourceHelper.executeDataSourceServletFlow. يكون المسار الافتراضي على النحو التالي:

  1. استخراج معلمات طلب البحث وتحليلها.
  2. بالنسبة لوضع تقييد المحتوى فقط، تحقق من أن الطلب ينشأ من نفس نطاق servlet.
  3. تحليل الطلب لإنشاء كائنين من طلبات البحث: طلب البحث في مصدر البيانات وطلب الإكمال. تمرير طلب بحث مصدر البيانات إلى تنفيذ generateDataTable().
  4. يؤدي تنفيذ generateDataTable() إلى إنشاء جدول بيانات.
  5. شغِّل طلب الإكمال في جدول البيانات الذي تم إنشاؤه في الخطوة 5.
  6. اعرض جدول البيانات بالتنسيق المحدد في التمثيل البصري وعيّن استجابة servlet.

لتحديد تدفق الأحداث الخاص بك، يمكنك استدعاء الوظائف المساعدة في datasource.DataSourceHelper. راجع تعريف الإمكانات وتدفق الأحداث للحصول على مثال على التنفيذ.

تمرير المعلمات إلى DataTableGenerator.generateDataTable

يمكنك استخدام HttpServletRequest.setAttribute لتمرير البيانات التي ليست جزءًا من طلب بحث أو كائن HttpServletRequest إلى DataTableGenerator.generateDataTable. في ما يلي مثال للشفرة.

في رمز servlet، ضع الكائن الذي تريد تمريره إلى HttpServletRequest على النحو التالي:

request.setAttribute("my_object_name", myObject);
DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);

في تنفيذ واجهة dataTableGenerator، احصل على الكائن من HttpServletRequest كما يلي:

public DataTable generateDataTable(Query query, HttpServletRequest request){
  Object myObject = request.getAttribute("my_object_name"); 
  // Add your code to manipulate myObject here 
} 

تنفيذ مصدر بيانات غير مأخوذ من الخادم

في حال تنفيذ المكتبة بدون استخدام servlet، يمكنك استخدام الفئات ووظائف المساعدة فقط التي لا تتطلب بيئة servlet. وتشمل الفئات Query وDataTable وبعض وظائف DataSourceHelper مثل parseQuery وapplyQuery وvalidateQuery وsplitQuery. يمكنك استخدام هذه الفئات والوظائف لإجراء ما يلي:

  • تحليل طلب بحث مرئي.
  • قسِّم طلب البحث إلى طلب مصدر بيانات واستعلام إكمال.
  • شغِّل طلب الإكمال لإنشاء جدول بيانات.
  • يمكنك إعادة جدول البيانات إلى التمثيل البصري HTML أو CSV أو JSON.