בקטע הזה תמצאו כמה טיפים שיעזרו לכם לכתוב הטמעות מורכבות יותר של הספרייה:
- שימוש בשרת משלכם
- הגדרת יכולות
- התאמה אישית של זרימת האירועים
- העברת פרמטרים אל
DataTableGenerator.generateDataTable
- הטמעה של מקור נתונים שלא משמש להצגת מודעות
שימוש בהצגה משלכם
ההטמעות הפשוטות ביותר של מקורות נתונים עוברות בירושה מהמחלקה DataSourceServlet
של הספרייה.
כדי לרשת בירושה ממחלקה שאינה DataSourceServlet
, עליכם להשתמש במקור נתונים כזה:
- מטמיעים את הממשק
DataTableGenerator
ומבטלים אתgetCapabilities()
ואתgenerateDataTable()
. - יש להפעיל את
DataSourceHelper.executeDataSourceServletFlow()
בקוד של השרת כדי להריץ את מקור הנתונים.שיטה זו כוללת את הפרמטרים הבאים:- אובייקט
HttpServletRequest
. - אובייקט
HttpServletResponse
. - הטמעת הממשק של
DataTableGenerator
משלב 1 שלמעלה. - ערך בוליאני שמציין גישה מוגבלת או בלתי מוגבלת.
- אובייקט
לדוגמה, אם אתם רוצים לרשת את השירות שלכם משיעור שירות אחר, שנקרא AuthServlet
, שמספק אימות מובנה, אפשר לשכתב את SimpleServletExample
כך שירשת את AuthServlet
במקום את DataSourceServlet
באופן הבא:
- מטמיעים את הממשק של
DataTableGenerator
. - העברת
generateDataTable()
מההטמעה שלDataSourceServlet
להטמעה שלDataTableGenerator
. - מבטלים את
getCapabilities()
בהטמעה שלDataTableGenerator
כדי להחזיר אתCapabilities.None
. - ניתן להתקשר למספר
DataSourceHelper.executeDataSourceServletFlow()
(באמצעות קוד השירות (doGet()
אוdoPost()
) ולעבור את ההטמעה שלDataTableGenerator
. השיטה הזו מריצה את כל הזרימה של מקור הנתונים, כולל רינדור התוצאות של מקור הנתונים בתגובת שרת הנתונים.
ניתן להשתמש באותה טכניקה אם משתמשים במסגרת שרת תמונות, שבה בדרך כלל יורשים שיעור מופשט של המסגרת.
למשל, אם משתמשים ב-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.
- רינדור את טבלת הנתונים לפורמט שצוין על ידי התצוגה החזותית והגדרת התגובה להגשה.
כדי לציין זרימת אירועים משלכם, התקשרו לפונקציות העזרה ב-datasource.DataSourceHelper
. במאמר לדוגמה, הגדרת יכולות וזרימת אירועים.
העברת פרמטרים אל DataTableGenerator.generateDataTable
תוכלו להשתמש בפונקציה HttpServletRequest.setAttribute
כדי להעביר ל-DataTableGenerator.generateDataTable
נתונים שאינם חלק משאילתה או מאובייקט HttpServletRequest
. הקוד לדוגמה מופיע למטה.
בקוד של השרת, מוסיפים את האובייקט שרוצים להעביר אל 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 }
הטמעת מקור נתונים שאינו שרת
אם אתם מטמיעים את הספרייה בלי להשתמש בשרת, תוכלו להשתמש רק במחלקות האלה ובפונקציות עזר שלא מחייבות סביבת שרת. בכך נכללות המחלקות Query
ו-DataTable
וחלק מפונקציות DataSourceHelper
, כמו parseQuery
, applyQuery
, validateQuery
ו-splitQuery
.
תוכלו להשתמש בכיתות ובפונקציות האלה כדי:
- נתחו שאילתת המחשה.
- פצל את השאילתה לשאילתה של מקור נתונים ולשאילתת השלמה.
- מריצים את שאילתת ההשלמה כדי ליצור טבלת נתונים.
- מחזירים את טבלת הנתונים לוויזואליזציה בפורמט
HTML
,CSV
אוJSON
.