In diesem Abschnitt finden Sie einige Tipps, die Ihnen helfen, komplexere Implementierungen der Bibliothek zu schreiben:
- Verwenden eines eigenen Servlets
- Definieren von Funktionen
- Ereignisfluss anpassen
- Parameter an
DataTableGenerator.generateDataTable
übergeben - Eine Nicht-Servlet-Datenquelle implementieren
Eigenes Servlet verwenden
Bei den einfachsten Datenquellenimplementierungen werden Werte von der DataSourceServlet
-Klasse der Bibliothek übernommen.
Wenn Sie Daten von einer anderen Klasse als DataSourceServlet
übernehmen möchten, müssen Sie eine Datenquelle so implementieren:
- Implementieren Sie die
DataTableGenerator
-Schnittstelle und überschreiben SiegetCapabilities()
undgenerateDataTable()
. - Rufen Sie
DataSourceHelper.executeDataSourceServletFlow()
aus dem Code Ihres Servlets auf, um den Datenquellenfluss auszuführen.Diese Methode verwendet die folgenden Parameter:- Ein
HttpServletRequest
-Objekt. - Ein
HttpServletResponse
-Objekt. - Ihre Implementierung der
DataTableGenerator
-Schnittstelle aus Schritt 1 oben. - Ein boolescher Wert zur Angabe des Modus mit eingeschränktem oder uneingeschränktem Zugriff.
- Ein
Wenn Sie beispielsweise das Servlet von einer anderen Servlet-Klasse mit dem Namen AuthServlet
übernehmen möchten, die eine integrierte Authentifizierung bietet, können Sie SimpleServletExample
so umschreiben, dass AuthServlet
statt DataSourceServlet
übernommen wird:
- Implementieren Sie die
DataTableGenerator
-Schnittstelle. - Verschieben Sie
generateDataTable()
von derDataSourceServlet
-Implementierung in dieDataTableGenerator
-Implementierung. - Überschreiben Sie
getCapabilities()
in IhrerDataTableGenerator
-Implementierung, umCapabilities.None
zurückzugeben. - Rufen Sie
DataSourceHelper.executeDataSourceServletFlow()
aus Ihrem Servlet-Code (doGet()
oderdoPost()
) auf und übergeben Sie die Implementierung vonDataTableGenerator
. Diese Methode führt den gesamten Ablauf der Datenquelle aus, einschließlich der Darstellung der Datenquellenergebnisse in der Servlet-Antwort.
Sie können dieselbe Technik verwenden, wenn Sie ein Servlet-Framework verwenden, in dem Sie normalerweise eine vom Framework bereitgestellte abstrakte Klasse übernehmen.
Wenn Sie beispielsweise WebWork verwenden, möchten Sie möglicherweise die Klasse ActionSupport
übernehmen.
Funktionen definieren
Wenn Ihr Datenspeicher eine große Datenmenge enthält und Sie die Effizienz Ihrer Datenquelle erhöhen möchten, können Sie die Abfragefunktionen des Datenspeichers verwenden. Angenommen, Ihr Datenspeicher ist eine Datenbank und die Datenbank hat eine große Anzahl von Spalten. Wenn eine Visualisierung nur wenige dieser Spalten anfordert, ist die Ausführung eines SELECT
-Vorgangs in der Datenbank effizienter, als alle Spalten abzurufen und die Abfragefunktionen der Bibliothek zum Ausführen des SELECT
-Vorgangs zu verwenden.
Zum Implementieren von SELECT
-Funktionen schreiben Sie Code, um einen SELECT
-Vorgang in der Datenbank auszuführen und eine Datentabelle zurückzugeben.
Verwenden Sie das Enum Capabilities
, um die Abfragefunktionen zu definieren, die Ihr Code bietet. Folgende Optionen sind verfügbar:
NONE
: Dies ist die Standardeinstellung. Der Code führt keine Abfragevorgänge aus.SQL
: Der Code stellt SQL-Abfragevorgänge bereit.SORT_AND_PAGINATION
: Der Code bietet Abfragevorgänge zum Sortieren und zur Paginierung.SELECT
: Ihr Code stellt einen Auswahlvorgang bereit.ALL
: Der Code stelltSQL
-,SORT_AND_PAGINATION
- undSELECT
-Vorgänge bereit.
Hinweis: In allen Fällen verarbeitet die Bibliothek alle Abfragevorgänge, die nicht von Ihrem Code bereitgestellt werden.
Wenn Sie eine andere Funktion als NONE
implementieren möchten, überschreiben Sie Capabilities.getCapabilities()
und implementieren Sie DataTable.generateDataTable()
, um den Datenspeicher abzufragen und eine Datentabelle zurückzugeben.
Drei der Beispiele veranschaulichen, wie Funktionen implementiert werden: AdvancedExampleServlet
, AdvancedExampleServlet2
und SqlDataSourceServlet
.
Alle befinden sich im Paket „example
“. AdvancedExampleServlet2
wird unter Funktionen und Ereignisfluss definieren erläutert.
Ereignisfluss anpassen
Der Standardfluss von Ereignissen wird in DataSourceHelper.executeDataSourceServletFlow
definiert.
Der Standardablauf sieht so aus:
- Abfrageparameter extrahieren und parsen
- Nur für den Modus mit eingeschränktem Zugriff: Prüfen Sie, ob die Anfrage von derselben Domain wie das Servlet stammt.
- Parsen Sie die Anfrage, um zwei Abfrageobjekte zu erstellen: die Datenquellenabfrage und die Abschlussabfrage. Übergeben Sie die Datenquellenabfrage an die Implementierung von
generateDataTable()
. - Durch Ihre Implementierung von
generateDataTable()
wird eine Datentabelle generiert. - Führen Sie die Abschlussabfrage für die in Schritt 5 generierte Datentabelle aus.
- Rendern Sie die Datentabelle in dem von der Visualisierung angegebenen Format und legen Sie die Servlet-Antwort fest.
Wenn Sie Ihren eigenen Ereignisfluss festlegen möchten, rufen Sie die Hilfsfunktionen in datasource.DataSourceHelper
auf. Eine Beispielimplementierung finden Sie unter Funktionen und Ereignisfluss definieren.
Parameter an DataTableGenerator.generateDataTable
übergeben
Mit HttpServletRequest.setAttribute
können Sie Daten, die nicht Teil einer Abfrage oder eines HttpServletRequest
-Objekts sind, an DataTableGenerator.generateDataTable
übergeben. Beispielcode finden Sie unten.
Fügen Sie im Code Ihres Servlets das Objekt, das Sie dem HttpServletRequest
übergeben möchten, so ein:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
So rufen Sie in der Implementierung der dataTableGenerator
-Schnittstelle das Objekt aus HttpServletRequest
ab:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
Nicht-Servlet-Datenquelle implementieren
Wenn Sie die Bibliothek ohne Servlet implementieren, können Sie nur die Klassen und Hilfsfunktionen verwenden, für die keine Servlet-Umgebung erforderlich ist. Dazu gehören die Klassen Query
und DataTable
sowie einige DataSourceHelper
-Funktionen wie parseQuery
, applyQuery
, validateQuery
und splitQuery
.
Mit diesen Klassen und Funktionen können Sie Folgendes tun:
- eine Visualisierungsabfrage parsen.
- Teilen Sie die Abfrage in eine Datenquellenabfrage und eine Abschlussabfrage auf.
- Führen Sie die Abschlussabfrage aus, um eine Datentabelle zu generieren.
- Die Datentabelle im Format
HTML
,CSV
oderJSON
in die Visualisierung zurückgeben.