In questa sezione troverai alcuni suggerimenti che ti aiuteranno a scrivere implementazioni più complesse della libreria:
- Utilizzo del tuo servlet
- Definizione delle funzionalità
- Personalizzare il flusso degli eventi
- Passaggio dei parametri a
DataTableGenerator.generateDataTable
- Implementare un'origine dati non servlet
Utilizzare il proprio servlet
Le implementazioni più semplici delle origini dati ereditano dalla classe DataSourceServlet
della libreria.
Per ereditare da una classe diversa da DataSourceServlet
, implementa
un'origine dati nel seguente modo:
- Implementa l'interfaccia
DataTableGenerator
ed esegui l'override digetCapabilities()
egenerateDataTable()
. - Chiama
DataSourceHelper.executeDataSourceServletFlow()
dal codice del servlet per eseguire il flusso dell'origine dati.Questo metodo prevede i seguenti parametri:- Un oggetto
HttpServletRequest
. - Un oggetto
HttpServletResponse
. - La tua implementazione dell'interfaccia
DataTableGenerator
nel passaggio 1 precedente. - Un valore booleano per specificare la modalità di accesso con o senza restrizioni.
- Un oggetto
Ad esempio, se vuoi ereditare il servlet da un'altra classe di servlet,
chiamata AuthServlet
, che fornisce l'autenticazione integrata,
puoi riscrivere SimpleServletExample
per ereditare AuthServlet
anziché
DataSourceServlet
nel seguente modo:
- Implementa l'interfaccia
DataTableGenerator
. - Sposta
generateDataTable()
dall'implementazioneDataSourceServlet
all'implementazioneDataTableGenerator
. - Esegui l'override di
getCapabilities()
nell'implementazioneDataTableGenerator
per restituireCapabilities.None
. - Richiama
DataSourceHelper.executeDataSourceServletFlow()
dal codice servlet (doGet()
odoPost()
) e passa l'implementazione diDataTableGenerator
. Questo metodo esegue l'intero flusso dell'origine dati, incluso il rendering dei risultati dell'origine dati nella risposta servlet.
Puoi utilizzare la stessa tecnica se usi un framework servlet in cui normalmente erediti una classe astratta fornita dal framework.
Ad esempio, se utilizzi WebWork, potresti voler ereditare la classe ActionSupport
.
Definizione delle funzionalità
Se il datastore contiene una grande quantità di dati e vuoi aumentare l'efficienza dell'origine dati, puoi utilizzare le funzionalità di query del datastore. Supponiamo, ad esempio, che il datastore sia un database
che abbia un numero elevato di colonne. Se una visualizzazione richiede solo poche di queste colonne, l'esecuzione di un'operazione SELECT
all'interno del database è più efficiente rispetto al recupero di tutte le colonne e all'utilizzo delle funzionalità di query della libreria per eseguire SELECT
.
Per implementare le funzionalità SELECT
, scrivi il codice per eseguire un'operazione SELECT
all'interno del database e restituire una tabella di dati.
Utilizza l'enum Capabilities
per definire le funzionalità di query fornite dal tuo codice. Le opzioni disponibili sono:
NONE
: impostazione predefinita, il codice non fornisce operazioni di query.SQL
: il tuo codice fornisce operazioni di query SQL.SORT_AND_PAGINATION
: il codice fornisce operazioni di query di ordinamento e impaginazione.SELECT
: il tuo codice fornisce un'operazione selezionata.ALL
: il codice fornisce operazioniSQL
,SORT_AND_PAGINATION
eSELECT
.
Nota: in tutti i casi, la libreria gestisce le operazioni di query non fornite dal codice.
Per implementare una funzionalità diversa da NONE
, esegui l'override di Capabilities.getCapabilities()
e implementa DataTable.generateDataTable()
per eseguire query sul datastore e restituire una tabella di dati.
Tre degli esempi mostrano come implementare le funzionalità: AdvancedExampleServlet
,
AdvancedExampleServlet2
e SqlDataSourceServlet
.
Sono tutti nel pacchetto example
. AdvancedExampleServlet2
è
parlato in Definizione delle capacità e flusso di eventi.
Personalizzare il flusso degli eventi
Il flusso predefinito di eventi è definito in DataSourceHelper.executeDataSourceServletFlow
.
Il flusso predefinito è il seguente:
- Estrarre e analizzare i parametri di query.
- Solo per la modalità di accesso limitato, verifica che la richiesta provenga dallo stesso dominio del servlet.
- Analizza la richiesta per creare due oggetti query: la query dell'origine dati e la query di completamento. Passa la query sull'origine dati alla tua implementazione
di
generateDataTable()
. - La tua implementazione di
generateDataTable()
genera una tabella di dati. - Esegui la query di completamento sulla tabella di dati generata nel passaggio 5.
- Esegui il rendering della tabella di dati nel formato specificato dalla visualizzazione e imposta la risposta del servlet.
Per specificare il tuo flusso di eventi, chiama
le funzioni helper in datasource.DataSourceHelper
. Consulta la sezione Definizione delle funzionalità e il flusso di eventi per un esempio di implementazione.
Passaggio dei parametri a DataTableGenerator.generateDataTable
Puoi utilizzare HttpServletRequest.setAttribute
per trasferire a DataTableGenerator.generateDataTable
dati che non fanno parte di una query o di un oggetto HttpServletRequest
. Il codice di esempio è riportato
di seguito.
Nel codice del servlet, inserisci l'oggetto che vuoi passare in HttpServletRequest
come segue:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
Nell'implementazione dell'interfaccia dataTableGenerator
, recupera l'oggetto da HttpServletRequest
come segue:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
Implementare un'origine dati non servlet
Se implementi la libreria senza utilizzare un servlet, puoi utilizzare solo le classi e le funzioni helper che non richiedono un ambiente servlet. Queste includono le classi Query
e DataTable
e alcune delle funzioni DataSourceHelper
come parseQuery
, applyQuery
, validateQuery
e splitQuery
.
Puoi utilizzare queste classi e funzioni per:
- Analizzare una query di visualizzazione.
- Suddividi la query in una query sull'origine dati e in una di completamento.
- Esegui la query di completamento per generare una tabella di dati.
- Ripristina la tabella di dati alla visualizzazione in formato
HTML
,CSV
oJSON
.