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