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
aku ikut mbaca aja Om,
bahasa pemograman menarik untuk disimak, tetapi perlu waktu untuk mencernanya,
mau memahaminya, harus private langsung kayaknya :D.
Dengan senang hati tante … gratis pokoknya
#superpede
Mas….
Saya boleh minta data base nya mas…
Ane ngikutin code nya si om kok ga ada yang pernah jalan yah? apa kurang kali yah
ada file zip nya om, thanks
Yaaa itu coding hanya bisa jalan kalau library atau plugin ZK sudah terinstall. Pastikan dulu ZKnya sudah berjalan dengan baik
class TblSetKota nya dimana ya mas???
punya saya Error nanyain itu mulu…