این بخش نکاتی را پوشش می دهد که به شما در نوشتن پیاده سازی های پیچیده تری از کتابخانه کمک می کند:
- استفاده از Servlet خودتان
- تعریف قابلیت ها
- سفارشی کردن جریان رویدادها
- ارسال پارامترها به
DataTableGenerator.generateDataTable
- پیاده سازی منبع داده غیر سرورلت
استفاده از Servlet خودتان
ساده ترین پیاده سازی های منبع داده از کلاس DataSourceServlet
کتابخانه به ارث می برند. برای ارث بردن از کلاسی غیر از DataSourceServlet
، یک منبع داده را به صورت زیر پیاده سازی کنید:
- رابط
DataTableGenerator
را پیاده سازی کنید وgetCapabilities()
وgenerateDataTable()
را لغو کنید. - برای اجرای جریان منبع داده
DataSourceHelper.executeDataSourceServletFlow()
از داخل کد servlet خود فراخوانی کنید. این روش پارامترهای زیر را می گیرد:- یک شی
HttpServletRequest
. - یک شی
HttpServletResponse
. - پیاده سازی رابط
DataTableGenerator
از مرحله 1 بالا. - یک بولی برای تعیین حالت دسترسی محدود یا نامحدود.
- یک شی
به عنوان مثال، اگر میخواهید سرولت خود را از کلاس سرولت دیگری به نام AuthServlet
که احراز هویت داخلی ارائه میکند به ارث ببرید، میتوانید SimpleServletExample
را برای ارث بردن AuthServlet
به جای DataSourceServlet
به صورت زیر بازنویسی کنید:
- رابط
DataTableGenerator
را پیاده سازی کنید. -
generateDataTable()
از اجرایDataSourceServlet
به پیاده سازیDataTableGenerator
خود منتقل کنید. - برای بازگشت
Capabilities.None
getCapabilities()
را در اجرایDataTableGenerator
خود لغو کنید. -
DataSourceHelper.executeDataSourceServletFlow()
از داخل کد سرولت خود (doGet()
یاdoPost()
) فراخوانی کنید و اجرایDataTableGenerator
خود را ارسال کنید. این روش کل جریان منبع داده را اجرا می کند، از جمله رندر کردن نتایج منبع داده در پاسخ سرولت.
اگر از یک فریمورک 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
تعریف شده است. جریان پیش فرض به شرح زیر است:
- استخراج و تجزیه پارامترهای پرس و جو
- فقط برای حالت دسترسی محدود، بررسی کنید که درخواست از همان دامنه سرورلت منشأ گرفته باشد.
- درخواست برای ایجاد دو شی پرس و جو را تجزیه کنید: پرس و جو منبع داده و پرس و جو تکمیل. کوئری منبع داده را به پیاده سازی
generateDataTable()
خود ارسال کنید. - پیاده سازی شما از
generateDataTable()
یک جدول داده تولید می کند. - پرس و جو تکمیل را روی جدول داده تولید شده در مرحله 5 اجرا کنید.
- جدول داده ها را به فرمت مشخص شده توسط تجسم ارائه دهید و پاسخ 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
به تصویرسازی برگردانید.