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
lalu menggantigetCapabilities()
dangenerateDataTable()
. - Panggil
DataSourceHelper.executeDataSourceServletFlow()
dari dalam kode servlet Anda untuk menjalankan alur sumber data.Metode ini mengambil parameter berikut:- Objek
HttpServletRequest
. - Objek
HttpServletResponse
. - Implementasi antarmuka
DataTableGenerator
Anda dari langkah 1 di atas. - Boolean untuk menentukan mode akses yang dibatasi atau tidak dibatasi.
- Objek
Misalnya, jika ingin mewarisi servlet dari class servlet
lain, yang disebut AuthServlet
yang menyediakan autentikasi bawaan,
Anda dapat menulis ulang SimpleServletExample
untuk mewarisi AuthServlet
, bukan
DataSourceServlet
, sebagai berikut:
- Terapkan antarmuka
DataTableGenerator
. - Pindahkan
generateDataTable()
dari implementasiDataSourceServlet
ke implementasiDataTableGenerator
Anda. - Ganti
getCapabilities()
dalam implementasiDataTableGenerator
Anda untuk menampilkanCapabilities.None
. - Panggil
DataSourceHelper.executeDataSourceServletFlow()
dari dalam kode servlet Anda (doGet()
ataudoPost()
), dan teruskan implementasiDataTableGenerator
. Metode ini menjalankan seluruh alur sumber data, termasuk merender hasil sumber data ke dalam respons servlet.
Anda dapat menggunakan teknik yang sama jika menggunakan framework servlet
yang biasanya mewarisi class abstrak yang disediakan oleh framework.
Misalnya, jika menggunakan WebWork, Anda mungkin ingin mewarisi class ActionSupport
.
Menentukan Kemampuan
Jika penyimpanan data Anda berisi data dalam jumlah besar, dan Anda ingin meningkatkan efisiensi sumber data, Anda dapat menggunakan kemampuan membuat kueri penyimpanan data. Misalnya, anggap saja penyimpanan data Anda adalah sebuah {i>database<i} dan {i>database<i} itu memiliki banyak kolom. Jika visualisasi
hanya meminta beberapa kolom tersebut, menjalankan operasi SELECT
dalam database akan lebih efisien daripada mengambil semua kolom dan
menggunakan kemampuan kueri library untuk melakukan 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
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 pilih.ALL
: kode Anda menyediakan operasiSQL
,SORT_AND_PAGINATION
, danSELECT
.
Catatan: Dalam semua kasus, library akan menangani operasi kueri apa pun yang tidak disediakan oleh kode Anda.
Untuk mengimplementasikan kemampuan selain NONE
, ganti Capabilities.getCapabilities()
dan
terapkan DataTable.generateDataTable()
untuk membuat kueri penyimpanan
data dan menampilkan tabel data.
Tiga contoh ini menggambarkan cara menerapkan kemampuan: AdvancedExampleServlet
,
AdvancedExampleServlet2
, dan SqlDataSourceServlet
.
Semua ada dalam paket example
. AdvancedExampleServlet2
dibahas dalam Menentukan Kemampuan dan Alur Peristiwa.
Menyesuaikan Alur Peristiwa
Alur default peristiwa ditentukan di DataSourceHelper.executeDataSourceServletFlow
.
Alur defaultnya adalah sebagai berikut:
- Mengekstrak dan mengurai parameter kueri.
- Hanya untuk mode akses terbatas, verifikasi 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 penerapan
generateDataTable()
Anda. - Implementasi
generateDataTable()
akan menghasilkan tabel data. - Jalankan kueri penyelesaian pada tabel data yang dihasilkan di 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
implementasi.
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, tempatkan objek yang ingin Anda teruskan 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.
- Memisahkan kueri menjadi kueri sumber data dan kueri penyelesaian.
- Jalankan kueri penyelesaian untuk menghasilkan tabel data.
- Tampilkan tabel data ke visualisasi dalam format
HTML
,CSV
, atauJSON
.