Bagian ini membahas beberapa tips yang akan membantu Anda menulis implementasi library yang lebih kompleks:
- Menggunakan Servlet Anda Sendiri
- Menentukan Kemampuan
- Menyesuaikan Alur Peristiwa
- Meneruskan Parameter ke
DataTableGenerator.generateDataTable
- Mengimplementasikan Sumber Data Non-servlet
Menggunakan Servlet Anda Sendiri
Implementasi sumber data yang paling sederhana mewarisi dari class DataSourceServlet
library.
Untuk mewarisi dari class selain DataSourceServlet
, terapkan
sumber data sebagai berikut:
- Menerapkan antarmuka
DataTableGenerator
dan menggantigetCapabilities()
dangenerateDataTable()
. - Panggil
DataSourceHelper.executeDataSourceServletFlow()
dari dalam kode servlet Anda untuk menjalankan aliran sumber data.Metode ini mengambil parameter berikut:- Objek
HttpServletRequest
. - Objek
HttpServletResponse
. - Implementasi antarmuka
DataTableGenerator
dari langkah 1 di atas. - Boolean untuk menentukan mode akses yang dibatasi atau tidak dibatasi.
- Objek
Misalnya, jika Anda ingin mewarisi servlet dari class servlet lain, yang disebut AuthServlet
yang menyediakan autentikasi bawaan, Anda dapat menulis ulang SimpleServletExample
untuk mewarisi AuthServlet
, bukan DataSourceServlet
, seperti berikut:
- Terapkan antarmuka
DataTableGenerator
. - Pindahkan
generateDataTable()
dari implementasiDataSourceServlet
ke penerapanDataTableGenerator
Anda. - Ganti
getCapabilities()
dalam implementasiDataTableGenerator
untuk menampilkanCapabilities.None
. - Panggil
DataSourceHelper.executeDataSourceServletFlow()
dari dalam kode servlet Anda (doGet()
ataudoPost()
), dan teruskan implementasiDataTableGenerator
Anda. Metode ini menjalankan seluruh aliran sumber data, termasuk merender hasil sumber data ke dalam respons servlet.
Anda dapat menggunakan teknik yang sama jika menggunakan framework servlet
yang biasanya diwarisi class abstrak yang disediakan oleh framework.
Misalnya, jika Anda menggunakan WebWork, Anda mungkin ingin mewarisi class ActionSupport
.
Menentukan Kemampuan
Jika penyimpanan data berisi data dalam jumlah besar dan Anda ingin meningkatkan efisiensi sumber data, gunakan kemampuan kueri penyimpanan data. Misalnya, anggaplah penyimpanan data Anda adalah database, dan database tersebut memiliki kolom dalam jumlah besar. Jika visualisasi
meminta hanya beberapa kolom tersebut, menjalankan operasi SELECT
dalam database akan lebih efisien daripada mengambil semua kolom dan
menggunakan kemampuan kueri library untuk menjalankan SELECT
.
Untuk mengimplementasikan kemampuan SELECT
, tulis kode
untuk menjalankan operasi SELECT
dalam database dan menampilkan
tabel data.
Gunakan enum Capabilities
untuk menentukan kemampuan kueri yang disediakan oleh kode Anda. Opsi yang tersedia adalah:
NONE
: default, kode Anda tidak menyediakan operasi kueri.SQL
: kode Anda menyediakan operasi kueri SQL.SORT_AND_PAGINATION
: kode Anda menyediakan operasi kueri pengurutan dan penomoran halaman.SELECT
: kode Anda menyediakan operasi tertentu.ALL
: kode Anda menyediakan operasiSQL
,SORT_AND_PAGINATION
, danSELECT
.
Catatan: Dalam semua kasus, library menangani operasi kueri yang tidak disediakan oleh kode Anda.
Untuk menerapkan kemampuan selain NONE
, ganti Capabilities.getCapabilities()
dan
implementasikan DataTable.generateDataTable()
untuk mengkueri penyimpanan
data dan menampilkan tabel data.
Tiga contoh menggambarkan cara mengimplementasikan kemampuan: AdvancedExampleServlet
,
AdvancedExampleServlet2
, dan SqlDataSourceServlet
.
Semuanya ada dalam paket example
. AdvancedExampleServlet2
dibahas dalam Menentukan Kemampuan dan Alur Peristiwa.
Menyesuaikan Alur Peristiwa
Alur peristiwa default ditentukan di DataSourceHelper.executeDataSourceServletFlow
.
Alur defaultnya adalah sebagai berikut:
- Mengekstrak dan mengurai parameter kueri.
- Khusus untuk mode akses terbatas, pastikan bahwa permintaan berasal dari domain yang sama dengan servlet.
- Uraikan permintaan untuk membuat dua objek kueri: kueri sumber data
dan kueri penyelesaian. Teruskan kueri sumber data ke implementasi
generateDataTable()
Anda. - Penerapan
generateDataTable()
akan menghasilkan tabel data. - Jalankan kueri penyelesaian pada tabel data yang dihasilkan pada langkah 5.
- Render tabel data ke dalam format yang ditentukan oleh visualisasi dan tetapkan respons servlet.
Untuk menentukan alur peristiwa Anda sendiri, panggil
fungsi bantuan di datasource.DataSourceHelper
. Lihat
Menentukan Kemampuan dan Alur Peristiwa untuk contoh penerapan.
Meneruskan Parameter ke DataTableGenerator.generateDataTable
Anda dapat menggunakan HttpServletRequest.setAttribute
untuk meneruskan
data yang bukan bagian dari kueri atau objek HttpServletRequest
ke DataTableGenerator.generateDataTable
. Kode contoh diberikan
di bawah ini.
Dalam kode servlet Anda, masukkan objek yang ingin diteruskan ke HttpServletRequest
sebagai
berikut:
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
Dalam implementasi antarmuka dataTableGenerator
, dapatkan objek dari HttpServletRequest
sebagai berikut:
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
Mengimplementasikan Sumber Data Non-servlet
Jika mengimplementasikan library tanpa menggunakan servlet, Anda hanya dapat menggunakan class dan fungsi bantuan yang tidak memerlukan lingkungan servlet. Ini mencakup class Query
dan DataTable
serta beberapa fungsi DataSourceHelper
seperti parseQuery
, applyQuery
, validateQuery
, dan splitQuery
.
Anda dapat menggunakan class dan fungsi ini untuk melakukan hal berikut:
- Menguraikan kueri visualisasi.
- Membagi kueri menjadi kueri sumber data dan kueri penyelesaian.
- Menjalankan kueri penyelesaian untuk membuat tabel data.
- Tampilkan tabel data ke visualisasi dalam format
HTML
,CSV
, atauJSON
.