Cette section présente quelques conseils qui vous aideront à écrire des implémentations plus complexes de la bibliothèque:
- Utiliser votre propre servlet
- Définir des fonctionnalités
- Personnaliser le flux des événements
- Transmettre des paramètres à
DataTableGenerator.generateDataTable
- Implémenter une source de données non-servlet
Utiliser votre propre servlet
Les implémentations de sources de données les plus simples héritent de la classe DataSourceServlet
de la bibliothèque.
Pour hériter d'une classe autre que DataSourceServlet
, implémentez une source de données comme suit:
- Implémentez l'interface
DataTableGenerator
, et ignorezgetCapabilities()
etgenerateDataTable()
. - Appelez
DataSourceHelper.executeDataSourceServletFlow()
à partir du code de votre servlet pour exécuter le flux de source de données.Cette méthode utilise les paramètres suivants :- Un objet
HttpServletRequest
. - Un objet
HttpServletResponse
. - Votre implémentation de l'interface
DataTableGenerator
de l'étape 1 ci-dessus. - Booléen spécifiant le mode d'accès restreint ou non.
- Un objet
Par exemple, si vous souhaitez hériter de votre servlet d'une autre classe de servlet, appelée AuthServlet
, qui fournit une authentification intégrée, vous pouvez réécrire le SimpleServletExample
pour qu'il hérite de AuthServlet
plutôt que de DataSourceServlet
, comme suit:
- Implémentez l'interface
DataTableGenerator
. - Déplacez
generateDataTable()
de votre implémentationDataSourceServlet
vers votre implémentationDataTableGenerator
. - Ignorez
getCapabilities()
dans votre implémentationDataTableGenerator
pour renvoyerCapabilities.None
. - Appelez
DataSourceHelper.executeDataSourceServletFlow()
à partir de votre code de servlet (doGet()
oudoPost()
), puis transmettez votre implémentation deDataTableGenerator
. Cette méthode exécute l'intégralité du flux de la source de données, y compris le rendu des résultats de la source de données dans la réponse du servlet.
Vous pouvez utiliser la même technique si vous utilisez un framework de servlets dans lequel vous héritez normalement d'une classe abstraite fournie par le framework.
Par exemple, si vous utilisez WebWork, vous pouvez hériter de la classe ActionSupport
.
Définir des fonctionnalités
Si votre datastore contient une grande quantité de données et que vous souhaitez augmenter l'efficacité de votre source de données, vous pouvez utiliser les fonctionnalités d'interrogation de votre datastore. Par exemple, supposons que votre data store soit une base de données et que cette base de données comporte un grand nombre de colonnes. Si une visualisation ne demande que quelques-unes de ces colonnes, l'exécution d'une opération SELECT
dans la base de données est plus efficace que de récupérer toutes les colonnes et d'utiliser les fonctionnalités d'interrogation de la bibliothèque pour effectuer l'opération SELECT
.
Pour mettre en œuvre les fonctionnalités SELECT
, vous devez écrire du code afin d'exécuter une opération SELECT
dans la base de données et de renvoyer une table de données.
Utilisez l'énumération Capabilities
pour définir les fonctionnalités d'interrogation fournies par votre code. Les options disponibles sont les suivantes :
NONE
: valeur par défaut. Votre code ne fournit aucune opération de requête.SQL
: votre code fournit des opérations de requête SQL.SORT_AND_PAGINATION
: votre code fournit à la fois des opérations de tri et de pagination.SELECT
: votre code fournit une opération de sélection.ALL
: votre code fournit des opérationsSQL
,SORT_AND_PAGINATION
etSELECT
.
Remarque: Dans tous les cas, la bibliothèque gère toutes les opérations de requête qui ne sont pas fournies par votre code.
Pour implémenter une fonctionnalité autre que NONE
, remplacez Capabilities.getCapabilities()
et implémentez DataTable.generateDataTable()
pour interroger le datastore et renvoyer une table de données.
Trois exemples illustrent comment implémenter des capacités: AdvancedExampleServlet
, AdvancedExampleServlet2
et SqlDataSourceServlet
.
Tous sont inclus dans le package example
. AdvancedExampleServlet2
est abordé dans la section Définir des fonctionnalités et le flux d'événements.
Personnalisation du flux d'événements
Le flux d'événements par défaut est défini dans DataSourceHelper.executeDataSourceServletFlow
.
Le flux par défaut est le suivant:
- Extraire et analyser les paramètres de requête
- Pour le mode d'accès restreint uniquement, vérifiez que la requête provient du même domaine que le servlet.
- Analysez la requête pour créer deux objets de requête: la requête de source de données et la requête d'achèvement. Transmettez la requête de source de données à votre implémentation de
generateDataTable()
. - Votre implémentation de
generateDataTable()
génère une table de données. - Exécutez la requête d'achèvement sur la table de données générée à l'étape 5.
- Affichez la table de données dans le format spécifié par la visualisation et définissez la réponse du servlet.
Pour spécifier votre propre flux d'événements, appelez les fonctions d'assistance dans datasource.DataSourceHelper
. Consultez la section Définir des fonctionnalités et le flux d'événements pour obtenir un exemple de mise en œuvre.
Transmettre des paramètres à DataTableGenerator.generateDataTable
Vous pouvez utiliser HttpServletRequest.setAttribute
pour transmettre des données qui ne font pas partie d'une requête ou d'un objet HttpServletRequest
à DataTableGenerator.generateDataTable
. Vous trouverez un exemple de code ci-dessous.
Dans le code de votre servlet, placez l'objet que vous souhaitez transmettre dans HttpServletRequest
comme suit:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
Dans l'implémentation de l'interface dataTableGenerator
, récupérez l'objet à partir de HttpServletRequest
comme suit:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
Implémenter une source de données non-servlet
Si vous implémentez la bibliothèque sans utiliser de servlet, vous ne pouvez utiliser que les classes et les fonctions d'assistance qui ne nécessitent pas d'environnement de servlet. Celles-ci incluent les classes Query
et DataTable
, ainsi que certaines fonctions DataSourceHelper
telles que parseQuery
, applyQuery
, validateQuery
et splitQuery
.
Vous pouvez utiliser ces classes et ces fonctions pour effectuer les opérations suivantes:
- analyser une requête de visualisation ;
- Divisez la requête en une requête de source de données et une requête d'achèvement.
- Exécutez la requête d'achèvement pour générer une table de données.
- Renvoyez la table de données à la visualisation au format
HTML
,CSV
ouJSON
.