W tej sekcji znajdziesz kilka wskazówek, które pomogą Ci pisać bardziej złożone implementacje biblioteki:
- Używanie własnego serwletu
- Definiowanie umiejętności
- Dostosowywanie przepływu zdarzeń
- Przekazywanie parametrów do
DataTableGenerator.generateDataTable
- Wdrażanie źródła danych bez obsługi
Korzystanie z własnego serwletu
Najprostsze implementacje źródła danych dziedziczą z biblioteki DataSourceServlet
biblioteki.
Aby dziedziczyć dane z klasy innej niż DataSourceServlet
, dodaj źródło danych w ten sposób:
- Zaimplementuj interfejs
DataTableGenerator
i zastąpgetCapabilities()
orazgenerateDataTable()
. - Wywołaj
DataSourceHelper.executeDataSourceServletFlow()
z kodu serwletu, aby uruchomić przepływ źródła danych.Przyjmuje ona te parametry:- Obiekt
HttpServletRequest
. - Obiekt
HttpServletResponse
. - Implementacja interfejsu
DataTableGenerator
z kroku 1 powyżej. - Wartość logiczna określająca tryb ograniczonego lub ograniczonego dostępu.
- Obiekt
Jeśli na przykład chcesz dziedziczyć serwlet z innej klasy serwletu o nazwie AuthServlet
, która zapewnia wbudowane uwierzytelnianie, możesz przepisać SimpleServletExample
tak, aby dziedziczył atrybut AuthServlet
zamiast DataSourceServlet
:
- Zaimplementuj interfejs
DataTableGenerator
. - Przenieś aplikację
generateDataTable()
ze swojej implementacjiDataSourceServlet
do implementacjiDataTableGenerator
. - Zastąp
getCapabilities()
w implementacjiDataTableGenerator
, aby zwrócićCapabilities.None
. - Wywołaj
DataSourceHelper.executeDataSourceServletFlow()
z kodu serwletu (doGet()
lubdoPost()
) i przekaż implementacjęDataTableGenerator
. Ta metoda przeprowadza cały przepływ źródła danych, w tym renderuje wyniki ze źródła danych do odpowiedzi serwletu.
Tej samej metody możesz używać, jeśli używasz platformy serwletu, w której zwykle dziedziczysz abstrakcyjną klasę określoną przez platformę.
Jeśli na przykład używasz WebWork, może chcesz odziedziczyć klasę ActionSupport
.
Definiowanie umiejętności
Jeśli Twój magazyn danych zawiera bardzo dużo danych i chcesz zwiększyć wydajność swojego źródła danych, możesz użyć funkcji zapytań dotyczących magazynu danych. Załóżmy na przykład, że magazyn danych to baza danych, która zawiera wiele kolumn. Jeśli wizualizacja żąda tylko kilku z tych kolumn, uruchomienie operacji SELECT
w bazie danych będzie wydajniejsze niż pobranie wszystkich kolumn i wykorzystanie funkcji zapytań z biblioteki do wykonania SELECT
.
Aby wdrożyć funkcje SELECT
, napisz kod uruchamiający operację SELECT
w bazie danych i zwracającą tabelę danych.
Użyj wyliczenia Capabilities
, aby określić funkcje zapytań, które zapewniają Twój kod. Dostępne opcje:
NONE
: kod domyślny nie zawiera operacji wykonywania zapytań.SQL
: kod zapewnia operacje zapytań SQL.SORT_AND_PAGINATION
: kod zawiera operacje sortowania oraz podziału na strony.SELECT
: kod umożliwia wykonanie wybranego działania.ALL
: kod zawiera operacjeSQL
,SORT_AND_PAGINATION
iSELECT
.
Uwaga: we wszystkich przypadkach biblioteka obsługuje wszystkie operacje wykonywania zapytań, które nie zostały dostarczone przez kod.
Aby wdrożyć funkcję inną niż NONE
, zastąp Capabilities.getCapabilities()
i zastosuj DataTable.generateDataTable()
, aby wysyłać zapytania do magazynu danych i zwracać tabelę danych.
Trzy przykłady pokazują, jak wdrożyć możliwości: AdvancedExampleServlet
, AdvancedExampleServlet2
i SqlDataSourceServlet
.
Wszystkie są w pakiecie example
. Tematem spotkania AdvancedExampleServlet2
jest definicja umiejętności i procesu zdarzeń.
Dostosowywanie przepływu zdarzeń
Domyślny przepływ zdarzeń jest zdefiniowany w DataSourceHelper.executeDataSourceServletFlow
.
Oto domyślny przepływ pracy:
- Wyodrębnij i przeanalizuj parametry zapytania.
- Tylko w trybie ograniczonego dostępu sprawdź, czy żądanie pochodzi z tej samej domeny co serwlet.
- Przeanalizuj żądanie utworzenia 2 obiektów zapytania: zapytania dotyczącego źródła danych i zapytania o zakończenie. Przekaż zapytanie o źródło danych do implementacji tagu
generateDataTable()
. - Twoja implementacja
generateDataTable()
generuje tabelę danych. - Uruchom zapytanie o ukończenie zadania w tabeli danych wygenerowanej w kroku 5.
- Wyrenderuj tabelę danych do formatu określonego przez wizualizację i ustaw odpowiedź serwletu.
Aby określić własny przepływ zdarzeń, wywołaj funkcje pomocnicze w komórce datasource.DataSourceHelper
. Przykład implementacji znajdziesz w punkcie Definiowanie możliwości i przepływu zdarzeń.
Przekazywanie parametrów do DataTableGenerator.generateDataTable
HttpServletRequest.setAttribute
umożliwia przekazywanie danych, które nie są częścią zapytania ani obiektu HttpServletRequest
, do DataTableGenerator.generateDataTable
. Przykładowy kod znajdziesz poniżej.
W kodzie serwletu umieść obiekt, który chcesz przekazać, w HttpServletRequest
:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
W implementacji interfejsu dataTableGenerator
pobierz obiekt z HttpServletRequest
w ten sposób:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
Implementowanie źródła danych bez obsługi
Jeśli zaimplementujesz bibliotekę bez użycia serwletu, możesz używać tylko tych klas i funkcji pomocniczych, które nie wymagają środowiska serwletu. Obejmuje to klasy Query
i DataTable
oraz niektóre funkcje DataSourceHelper
, takie jak parseQuery
, applyQuery
, validateQuery
i splitQuery
.
Tych zajęć i funkcji możesz używać do:
- Analizuj wizualizację
- Podziel zapytanie na zapytanie dotyczące źródła danych i zakończenie.
- Uruchom zapytanie o ukończenie, aby wygenerować tabelę danych.
- Przywróć tabelę danych do wizualizacji w formacie
HTML
,CSV
lubJSON
.