Terimakasih pada seorang temen yang menanyakan cara mengisi label pada header ZK Listbox dari hasil query. Tutorial ini akan menjelaskan :
“Bagaimana cara mengisi label Listbox header pada ZK Framework dari nama kolom hasil query ?“
Sebenarnya cara ini jarang dipakai, tetapi kadang dibutuhkan pada kasus tertentu. Kebanyakan pengambilan data berupa list of data : List<Data> cukup dari ORM seperti JPA atau Hibernate. Untuk case ini, masih menggunakan jdbc yaitu untuk keperluan pengambilan ResultsetMetaData dimana pada object ini terdapat semua info mengenai hasil query kita. Atau jika metode ORM bisa diambil daftar nama kolomnya, aku belum pernah coba.
Skenario:
- Kita memiliki tabel di MySql : tbl_set_kota

- Kita ingin menampilkan hasil query ke Listbox menggunakan zk framework dengan nama header nya diambil dari nama kolom hasil query:
SELECT kd_kota,nm_kota FROM `tbl_set_kota`
Step by step:
- Buat query
SELECT kd_kota,nm_kota FROM `tbl_set_kota`
- Buat zul dengan nama kota.zul
<?xml version="1.0" encoding="UTF-8"?> <zk xmlns="http://www.zkoss.org/2005/zul"> <borderlayout apply="net.ahsanfile.zk.tutorial.controller.setting.KotaController"> <center border="none" flex="true" style="padding:8px"> <vbox> <hbox> <button label="Add" id="btnAddKota"/> <button label="Edit" id="btnEditKota" disabled="true"/> </hbox> <listbox id="listKota" width="600px"></listbox> </vbox> </center> <south id="detailKota" title="Detail Kota" border="none" size="50%" flex="true" splittable="true" collapsible="true" open="false"> <include id="detailKotaInclude"/> </south> </borderlayout> </zk> - Buat sebuah class yang akan menampung List<kolom> dan List<TblSetKota>. Dalam contoh ini nama class adalah DataKota.java
/** * * @author ahsanfile */ public class DataKota { private List<String> listHeader; private List<TblSetKota> listKota; public List<String> getListHeader() { return listHeader; } public void setListHeader(List<String> listHeader) { this.listHeader = listHeader; } public List<TblSetKota> getListKota() { return listKota; } public void setListKota(List<TblSetKota> listKota) { this.listKota = listKota; } } - Buat method untuk mengisi class DataKota.java, yaitu method getDataKota. Untuk mempermudahnya method ini kita buat dalam Class Kota.java
/** * * @author ahsanfile */ public class Kota { private String sql; private Connection connection; public Kota(Connection con) { this.connection = con; } public DataKota getDataKota() throws Exception { PreparedStatement ps = null; try { DataKota dk = new DataKota(); List<String> ls = new ArrayList<String>(); List<TblSetKota> ltsk = new ArrayList<TblSetKota>(); sql = "select kd_kota,nm_kota from tbl_set_kota order by nm_kota"; ps = connection.prepareStatement(sql); ResultSet rs = ps.executeQuery(); // ambil data kolom ResultSetMetaData rsmd = rs.getMetaData(); int collumnCount = rsmd.getColumnCount(); for (int i = 1; i <= collumnCount; i++) { // pengambilan nama kolom dimulai dari index nomor 1, bukan 0 ls.add(rsmd.getColumnLabel(i).toUpperCase()); } dk.setListHeader(ls); // ambil data kota while (rs.next()) { ltsk.add(new TblSetKota(rs.getInt("kd_kota"), rs.getString("nm_kota"))); } rs.close(); dk.setListKota(ltsk); return dk; } finally { Closer.closePreparedStatement(ps); } } } - Buat controller untuk menghandle kota.zul yaitu dalam package net.ahsanfile.zk.tutorial.controller.setting dengan nama KotaController.java
/** * * @author ahsanfile */ public class KotaController extends GenericForwardComposer { private Listbox listKota; private DataBase db; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); isiListKota(); } private void isiListKota() { try { db = new DataBase(); Kota k = new Kota(db.getConnection()); DataKota dk = k.getDataKota(); // isi header untul listKota Listhead headers = new Listhead(); // initialize header List<String> listHeaderKota = dk.getListHeader(); for (Iterator<String> it = listHeaderKota.iterator(); it.hasNext();) { String string = it.next(); Listheader header = new Listheader(); // initialize kolom header header.setLabel(string); headers.appendChild(header); // tambahkan kolom header ke header } listKota.appendChild(headers); // tambahkan header ke listKota // isi data List<TblSetKota> ltsk = dk.getListKota(); listKota.setModel(new ListModelList(ltsk, true)); listKota.setItemRenderer(new ListitemRenderer() { public void render(Listitem lstm, Object o) throws Exception { TblSetKota tsk = (TblSetKota) o; new Listcell(tsk.getKdKota()+"").setParent(lstm); new Listcell(tsk.getNmKota()).setParent(lstm); } }); } catch (Exception e) { e.printStackTrace(); alert(e.getMessage()); } finally { db.closeConnection(); } } } - Sampai di sini semua yang dibutuhkan sudah kita buat semua. Silahkan running project anda, semoga sukses.
Download sample:
http://www.4shared.com/zip/SfaNeuEX/zktutorial.html
Keterangan, tutorial ini adalah bagian dari step by step membuat aplikasi simple pos menggunakan zk framework. untuk contoh koding ini, ada dibagian Setting->Set Kota

