In diesem Abschnitt finden Sie einige Tipps zum Schreiben komplexerer Implementierungen der Bibliothek:
- Eigenes Servlet verwenden
- Funktionen definieren
- Ereignisfluss anpassen
- Parameter an
DataTableGenerator.generateDataTable
übergeben - Nicht-Servlet-Datenquelle implementieren
Eigenes Servlet verwenden
Die einfachste Implementierung der Datenquelle übernimmt die Klasse DataSourceServlet
der Bibliothek.
Wenn Sie eine andere Klasse als DataSourceServlet
übernehmen möchten, implementieren Sie eine Datenquelle so:
- Implementiere die
DataTableGenerator
-Schnittstelle und überschreibegetCapabilities()
undgenerateDataTable()
. - Rufen Sie
DataSourceHelper.executeDataSourceServletFlow()
im Code Ihres Servlets auf, um den Datenquellenfluss auszuführen.Für diese Methode werden die folgenden Parameter verwendet:- Ein
HttpServletRequest
-Objekt. - Ein
HttpServletResponse
-Objekt. - Deine Implementierung der
DataTableGenerator
-Schnittstelle aus Schritt 1 oben. - Boolescher Wert, der den eingeschränkten oder uneingeschränkten Zugriffsmodus angibt.
- Ein
Wenn Sie beispielsweise Ihr Servlet aus einer anderen Servlet-Klasse namens AuthServlet
übernehmen möchten, das eine integrierte Authentifizierung bietet, können Sie SimpleServletExample
so ändern, dass AuthServlet
statt DataSourceServlet
übernommen wird:
- Implementiere 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()
im Servlet-Code (doGet()
oderdoPost()
) auf und übergeben Sie die Implementierung vonDataTableGenerator
. Bei dieser Methode wird der gesamte Ablauf der Datenquelle ausgeführt, einschließlich der Ergebnisse der Datenquelle in der Servlet-Antwort.
Sie können diese Technik auch verwenden, wenn Sie ein Servlet-Framework verwenden, in dem Sie normalerweise eine abstrakte Klasse übernehmen, die vom Framework zur Verfügung gestellt wird.
Wenn Sie beispielsweise WebWork verwenden, können Sie 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 Ihres Datenspeichers verwenden. Angenommen, Ihr Datenspeicher ist eine Datenbank und die Datenbank enthält eine große Anzahl von Spalten. Wenn bei einer Visualisierung nur einige dieser Spalten angefordert werden, ist das Ausführen eines SELECT
-Vorgangs in der Datenbank effizienter als das Abrufen aller Spalten und das Verwenden der Abfragefunktionen der Bibliothek zum Ausführen des SELECT
.
Zum Implementieren von SELECT
-Funktionen schreiben Sie Code, um einen SELECT
-Vorgang in der Datenbank auszuführen und eine Datentabelle zurückzugeben.
Verwenden Sie die Aufzählung Capabilities
, um die Abfragefunktionen zu definieren, die Ihr Code bietet. Folgende Optionen sind verfügbar:
NONE
ist die Standardeinstellung. Ihr Code stellt keine Abfragevorgänge bereit.SQL
: Ihr Code stellt SQL-Abfragevorgänge bereit.SORT_AND_PAGINATION
: Ihr Code bietet Vorgänge zum Sortieren und zur Paginierung.SELECT
: Ihr Code bietet einen Auswahlvorgang.ALL
: Ihr Code bietetSQL
-,SORT_AND_PAGINATION
- undSELECT
-Vorgänge.
Hinweis: In allen Fällen übernimmt die Bibliothek alle Abfragevorgänge, die nicht im Code enthalten sind.
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 sind im Paket example
enthalten. AdvancedExampleServlet2
wird unter Funktionen und den Fluss von Ereignissen definieren erläutert.
Ereignisfluss anpassen
Der Standardablauf für Ereignisse ist in DataSourceHelper.executeDataSourceServletFlow
definiert.
Der Standardablauf sieht so aus:
- Abfrageparameter extrahieren und parsen
- Nur im Modus für eingeschränkten Zugriff prüfen Sie, ob die Anfrage von derselben Domain wie das Servlet stammt.
- Parst die Anfrage, um zwei Abfrageobjekte zu erstellen: die Abfrage der Datenquelle und die Vervollständigungsabfrage. Übergeben Sie die Datenquellenabfrage an Ihre Implementierung von
generateDataTable()
. - Durch die 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 einen eigenen Ereignisfluss angeben möchten, rufen Sie die Hilfsfunktionen in datasource.DataSourceHelper
auf. Eine Beispielimplementierung finden Sie unter Funktionen und den Fluss von Ereignissen definieren.
Parameter an DataTableGenerator.generateDataTable
übergeben
Sie können HttpServletRequest.setAttribute
verwenden, um Daten, die nicht Teil einer Abfrage oder eines HttpServletRequest
-Objekts sind, an DataTableGenerator.generateDataTable
zu übergeben. Einen Beispielcode finden Sie unten.
Fügen Sie im Code Ihres Servlets das Objekt, das Sie übergeben möchten, so in HttpServletRequest
ein:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
Rufen Sie in der Implementierung der dataTableGenerator
-Schnittstelle das Objekt aus HttpServletRequest
so 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 Verwendung eines Servlets 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:
- Visualisierungsabfrage parsen
- Die Abfrage in eine Abfrage für eine Datenquelle und eine Vervollständigung aufteilen
- Führen Sie die Abschlussabfrage aus, um eine Datentabelle zu generieren.
- Geben Sie die Datentabelle im Format
HTML
,CSV
oderJSON
an die Visualisierung zurück.