En esta sección, se abordan algunas sugerencias que te ayudarán a escribir implementaciones más complejas de la biblioteca:
- Usa tu propio servlet
- Definición de capacidades
- Cómo personalizar el flujo de eventos
- Cómo pasar parámetros a
DataTableGenerator.generateDataTable
- Cómo implementar una fuente de datos sin servlet
Usa tu propio servlet
Las implementaciones de fuentes de datos más simples heredan de la clase DataSourceServlet
de la biblioteca.
Si deseas heredar contenido de una clase que no sea DataSourceServlet
, implementa una fuente de datos de la siguiente manera:
- Implementa la interfaz
DataTableGenerator
y anulagetCapabilities()
ygenerateDataTable()
. - Llama a
DataSourceHelper.executeDataSourceServletFlow()
desde el código de tu servlet para ejecutar el flujo de la fuente de datos.Este método usa los siguientes parámetros:- Un objeto
HttpServletRequest
- Un objeto
HttpServletResponse
- Tu implementación de la interfaz
DataTableGenerator
del paso 1 anterior. - Es un valor booleano para especificar el modo de acceso restringido o no restringido.
- Un objeto
Por ejemplo, si deseas heredar el servlet de otra clase de servlet, llamada AuthServlet
, que proporciona autenticación integrada, puedes reescribir SimpleServletExample
para heredar AuthServlet
en lugar de DataSourceServlet
de la siguiente manera:
- Implementa la interfaz
DataTableGenerator
. - Transfiere
generateDataTable()
de tu implementación deDataSourceServlet
a tu implementación deDataTableGenerator
. - Anula
getCapabilities()
en tu implementación deDataTableGenerator
para mostrarCapabilities.None
. - Llama a
DataSourceHelper.executeDataSourceServletFlow()
desde el código del servlet (doGet()
odoPost()
) y pasa tu implementación deDataTableGenerator
. Este método ejecuta todo el flujo de la fuente de datos, incluida la renderización de los resultados de la fuente de datos en la respuesta del servlet.
Puedes utilizar la misma técnica si utilizas un framework de servlet en el que, por lo general, heredas una clase abstracta proporcionada por el framework.
Por ejemplo, si usas WebWork, es posible que quieras heredar la clase ActionSupport
.
Definición de capacidades
Si tu almacén de datos contiene una gran cantidad de datos y deseas aumentar la eficiencia de la fuente de datos, puedes usar las capacidades de consulta de tu almacén de datos. Por ejemplo, supongamos que tu almacén de datos es una base de datos que tiene una gran cantidad de columnas. Si una visualización solicita solo algunas de esas columnas, ejecutar una operación SELECT
dentro de la base de datos es más eficiente que recuperar todas las columnas y usar las capacidades de consulta de la biblioteca para realizar la SELECT
.
Para implementar las funciones de SELECT
, escribe el código a fin de ejecutar una operación SELECT
dentro de la base de datos y mostrar una tabla de datos.
Usa la enumeración Capabilities
para definir las capacidades de consulta que proporciona tu código. Las opciones disponibles son las siguientes:
NONE
: Es el valor predeterminado; el código no proporciona operaciones de consulta.SQL
: Tu código proporciona operaciones de consulta en SQL.SORT_AND_PAGINATION
: Tu código proporciona operaciones de consulta de orden y paginación.SELECT
: Tu código proporciona una operación de selección.ALL
: Tu código proporciona operacionesSQL
,SORT_AND_PAGINATION
ySELECT
.
Nota: En todos los casos, la biblioteca maneja cualquier operación de consulta que tu código no proporciona.
Para implementar una función distinta de NONE
, anula Capabilities.getCapabilities()
y, luego, implementa DataTable.generateDataTable()
para consultar el almacén de datos y mostrar una tabla de datos.
En tres de los ejemplos, se muestra cómo implementar capacidades: AdvancedExampleServlet
, AdvancedExampleServlet2
y SqlDataSourceServlet
.
Todos se encuentran en el paquete example
. AdvancedExampleServlet2
se analiza en Cómo definir capacidades y el flujo de eventos.
Cómo personalizar el flujo de eventos
El flujo de eventos predeterminado se define en DataSourceHelper.executeDataSourceServletFlow
.
El flujo predeterminado es el siguiente:
- Extraer y analizar parámetros de consulta
- Solo para el modo de acceso restringido, verifica que la solicitud se origine en el mismo dominio que el servlet.
- Analiza la solicitud para crear dos objetos de consulta: la consulta de fuente de datos y la consulta de finalización. Pasa la consulta de fuente de datos a tu implementación de
generateDataTable()
. - Tu implementación de
generateDataTable()
genera una tabla de datos. - Ejecuta la consulta de finalización en la tabla de datos generada en el paso 5.
- Renderiza la tabla de datos en el formato que especifica la visualización y configura la respuesta del servlet.
Para especificar tu propio flujo de eventos, llama a las funciones auxiliares en datasource.DataSourceHelper
. Consulta Cómo definir las funciones y el flujo de eventos para ver una implementación de ejemplo.
Cómo pasar parámetros a DataTableGenerator.generateDataTable
Puedes usar HttpServletRequest.setAttribute
para pasar datos que no forman parte de una consulta o del objeto HttpServletRequest
a DataTableGenerator.generateDataTable
. A continuación, se proporciona un código de ejemplo.
En el código de tu servlet, coloca el objeto que deseas pasar al HttpServletRequest
de la siguiente manera:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
En la implementación de la interfaz dataTableGenerator
, obtén el objeto de HttpServletRequest
de la siguiente manera:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
Cómo implementar una fuente de datos sin servlet
Si implementas la biblioteca sin usar un servlet, puedes usar solo aquellas clases y funciones auxiliares que no requieran un entorno de servlet. Estas incluyen las clases Query
y DataTable
, y algunas de las funciones DataSourceHelper
, como parseQuery
, applyQuery
, validateQuery
y splitQuery
.
Puedes usar estas clases y funciones para hacer lo siguiente:
- Analizar una consulta de visualización.
- Dividir la consulta en una consulta de fuente de datos y una consulta de finalización.
- Ejecuta la consulta de finalización para generar una tabla de datos.
- Regresa la tabla de datos a la visualización en formato
HTML
,CSV
oJSON
.