Posts Tagged ‘Wicket’

Wicket + Hibernate

Sebelum bisa menggunakan Wicket + Hibernate, saya musti belajar hibernate-nya dulu nih. Belum nanti menggunakan Spring juga..

Karena dari dulu males belajar Hibernate, jadi sekarang ini ketika sudah mulai males ngetik SQL seabrak2, dan juga kalau bikin product dengan depannya ada tulisan Spring+Hibernate+Wicket gitu tingkat kerennya lebih tinggi :)), terpaksa mulai belajar dari depan.

So gimana wicket+hibernate-nya ditunda dulu ya, mumpung ada waktu belajar hibernate, disela2 ngurusin tariff dan range, saya belajar hibernate dulu.

Tags: , ,

Belajar Wicket: Model 2

Selain PropertyModel dan CompoundPropertyModel, yang sering saya gunakan adalah interface IModel. Interface ini mempunyai method yang harus diimplement load(). Contoh deklarasinya seperti dibawah

IModel model  = new IModel() {
@Override
public Object load() {
return "Hasil";
}
};

IModel membuat model menjadi lebih dinamis dengan kemungkinan untuk fetch data pada runtime. Oleh karena itu untuk komponen yang refreshable, seperti table data, model yang digunakan extends dari IModel.

LoadableDetachableModel selangkah lebih dari IModel, dengan satu method lagi detach() yang fungsinya saya sendiri belum paham benar, tapi yang jelas fungsi detach() akan unload data pada model ketika tidak digunakan dan seperti IModel, akan menggunakan method load() ketika data akan digunakan.

Untuk contohnya, tunggu saya coba dulu :))

Tags: , ,

Belajar Wicket: Model

Seperti M pada MVC, Model berfungsi sebagai data holder bagi setiap komponen yang menyertakannya. Berbeda dengan Model pada MVC, maka Model pada wicket tidak bertanggung jawab terhadap persistensi data aplikasi, tetapi merupakan bagian dari View. Well sebenarnya Model pad MVC-pun tidak bertanggung jawab terhadap persistensi, tapi merupakan representasi dari data aplikasi.

Kembali ke Model-nya Wicket, setiap komponen, baik komponen sederhana seperti Label atau Input, sampai yang lebih komplek seperti untuk DropDownChoice atau DataView (komponen untuk menampilkan data-data pada table dan punya kemampuan paging) memerlukan object penampung data dan Model ini adalah object tersebut.

Constructor untuk komponen salah satunya adalah new Component(String s, Model m), jadi rasanya sangat jelas fungsi dari Model. Beberapa Model yang sering digunakan adalah PropertyModel, CompoundPropertyModel dan Model itu sendiri.

PropertyModel digunakan untuk menampung data input dalam html dengan menggunakan field yang ada pada class. Contohnya adalah :
public class Test extends WebPage {
private String hello;
public Test() {
TextField hello = new TextField("hello",new PropertyModel(this,"hello");
add(hello);
}
public String getHello() {
return this.hello;
}
public void setHello(String hello) {
this.hello = hello;
}
}

Ketika input hello diisi satu nilai kemudian disubmit, field hello pada class Test akan otomatis terisi nilai seperti pada pagenya. Jika ada proses, nilai hello dapat diambil dengan getHello. It’s that simple :D

CompoundPropertyModel adalah model yang menggunakan object lain sebagai data holder bagi page. Model ini sangat mempermudah development aplikasi karena kita bisa definisi data sebelum page dibuat. contoh: public class TestData {
private String hello;
public String getHello() {
return this.hello;
}
public void setHello(String hello) {
this.hello = hello;
}
}
public class Test extends WebPage {
public Test() {
TestData data = new TestData();
CompoundPropertyModel model = new CompoundPropertyModel(data);
Form form = new Form("testForm",model);
form.add(new TextField("hello"));
add(form);
}
}

Cukup rumit jika hanya digunakan untuk satu field, tapi akan sangat terasa kalau class datanya punya banyak field. Dan akan sangat handy karena class data dapat digunakan sebagai parameter pada submit.

Masih ada beberapa point yang belum dibahas.. jadi masih bersambung ;)

Tags: , ,

Belajar wicket

Membuat aplikasi berbasis web dengan wicket relatif mudah. Yang perlu dilakukan adalah :

  • Download wicket dari sini
  • Setup project dengan IDE favorit. (bisa Idea, Eclipse, Netbeans, ataupun yang lainnya.. Emacs, Vim :D )
  • Extract wicket dan tambahkan library ke project. ( wicket, wicket-extensions, slf4j-api: yang ini harus search deh )
  • Set web.xml. Untuk versi 1.3, wicket sudah memakai filter, selain pilihan menggunakan servlet. contohnya adalah :
    <web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns<img src='http://catatankecil.masdrag.com/smilies/yahoo_love.gif' alt='&#58;&#120;' class='wp-smiley' width='18' height='18' title='&#58;&#120;' />si="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
    &lt;display-name&gt;Contoh App&lt;/display-name&gt;
    &lt;description&gt;;Contoh Aplikasi&lt;/description&gt;
    &lt;filter&gt;
    &lt;filter-name&gt;AppFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class&gt;
    &lt;/filter&gt;
    &lt;init-param&gt;
    &lt;param-name&gt;applicationClassName&lt;/param-name&gt;
    &lt;param-value&gt;contoh.ContohApplication&lt;/param-value&gt;
    &lt;/init-param&gt;
    &lt;filter-mapping&gt;
    &lt;filter-name&gt;AppFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&amp;&lt;/url-pattern&gt;
    &lt;/filter-mapping&gt;
    &lt;/web-app&gt;
  • Buat class contoh.ContohApplication, seperti para web.xml diatas. File ini adalah pintu dari aplikasi dengan framework wicket. Class ini nantinya akan memanggil class lain yang merupakan turunan dari WebPage untuk menjadi page pertama yang muncul dari aplikasi. Contoh :
    package contoh;
    import org.apache.wicket.protocol.http.WebApplication;
    import org.apache.wicket.Session;
    import org.apache.wicket.Request;
    import org.apache.wicket.Response;
    import contoh.Hello;
    public class ContohApplication extends WebApplication {
    @Override
    public Class getHomePage() {
    return Hello.class;
    }
    }
  • Seperti dapat dilihat diclass ContohApplication, ada method getHomePage yang di override untuk mengeluarkan Hello.class. Secara defaul, aplikasi akan memanggil method getHomePage, jadi selanjutnya adalah membuat class Hello yang merupakan turunan dari WebPage. Contoh :
    package contoh;
    import org.apache.wicket.markup.html.basic.Label;
    class Hello extends WebPage {
    public Hello() {
    add(new Label("hello","HELLO"));
    }
    }
  • Langkah terakhir adalah membuat html page sebagai tampilan dari page yang sudah kita buat. Wicket akan mencari file html dengan nama yang sama dengan class yang tadi kita bikin. Jadi sekarang kita buat file Hello.html.
    &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
    &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;head&gt;
    &lt;title&gt;Hello&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;span wicket:id="hello"&gt;[Hello]&lt;/span&gt;
    &lt;/body&gt;

There you go. Aplikasi siap dijalankan.

Sedikit penjelasan, ketika html di parse oleh wicket, wicket akan mencari id yang sama dengan yang ada di class, jadi seperti contoh diatas, pada class ada deklakasi penambahan komponen Label ke page add(new Label("hello","HELLO")) dan pada html <span wicket:id="hello">[Hello]</span>. Secara otomatis, wicket akan merubah wicket:id=”hello” menjadi string Hello.

Enjoy.

Tags: , ,

Kenalan Wicket yuk..

Wicket adalah java framework untuk develop aplikasi berbasis web. Kalau mau baca-baca sumbernya langsung atau sekalian donlot dan coba, bisa dicari disini.

Yang membuat saya merasa senang dengan framework ini adalah bahwa wicket berbasis komponen, yang berarti komponen web seperti input, tombol dan sebagainya sudah ada di framework. Dan diharapkan juga nanti ada komponen semacam table, grid dan komponen lain yang lebih komplek.

Dan juga karena wicket menggunakan event sebagai flow dari aplikasi, bukan controller-action, maka aplikasi dari wicket akan lebih berbau aplikasi desktop daripada aplikasi web. Jadi setiap komponen dalam aplikasi yang dibangun dengan wicket juga merupakan event-source dari behavior aplikasi. Ketika tombol saya tekan, maka aplikasi akan bereaksi terdapat penekanan tombol tersebut.

Penekanan terakhir terhadap framework ini adalah bahwa aplikasi yang dibangun akan bersifat stateful. Jadi berbeda dengan framework lain, wicket akan menyimpan state dari page yang tampil di layar. Drawbacknya adalah setiap perubahan dilayar juga harus dilakukan di server. Untuk perubahan static (seperti form entry) tidak berbeda dengan aplikasi lain, tapi untuk form yang lebih komplek, misalnya list yang akan mengupdate field lain, hal ini akan membuat aplikasi lebih komplek karena harus selalu diupdate ke server.. hmm.. which is sebenarnya sih sama saja ya.. bahkan menjadi lebih mudah.

Dengan didukungnya AJAX out of the box ( langsung bisa dipakai ), development aplikasi menjadi jauh lebih cepat dan menyenangkan. Penggunaan AJAX bahkan tanpa perlu kita tau javascript ;) komponen AJAX sudah tersedia di wicket.

Oh ya, yang paling penting malah terlupakan. Wicket menggunakan teknologi java yang paling kuno, yaitu pure OOP. Page adalah sebuah class yang diturunkan dari class lain..

Jadi bagi yang kuat konsep OOP-nya, akan sangat gampang mempelajari wicket.

Tags: , ,