7 Kasım 2012 Çarşamba

Wicket ile Componentler

Bu yazı ile ilgili olarak Wicket ile Formlar başlıklı yazıyı okuyabilirsiniz.

Anladığım kadarıyla Wicket ile görsel olarak sayfada gösterilen herşey Component sınıfından türüyor.

Component LifeCycle
Component yaşamdöngüsü boyunca aşağıdaki metodlar çağırılıyor
Constructor (sadece bir kere çağırılır)
onInitialize (sadece bir kere çağırılır)
onConfigure (görünen/görünmeyen - visible/invisible - her component için her istekte çağırılır)
onBeforeRender (görünen - visible - olan her component için her istekte çağırılır)
onRender (görünen - visible -olan her component için her istekte çağırılır). RESTful Web Services with Wicket sayfasında bu metodun REST tarzı işler için nasıl kulllanıldığını görmek mümkün.
onComponentTag (görünen - visible -olan her component için her istekte çağırılır)
onComponentTagBody (görünen - visible -olan her component için her istekte çağırılır)
anAfterRender (görünen - visible -olan her component için her istekte çağırılır)
onDetach (görünen/görünmeyen - visible/invisible - her component için her istekte çağırılır)
onRemove Bir component hiyerarşiden çıkarılırsa çağırılır. Örneğin bir panel başka bir panel ile yer değiştirirse.
 
Business logic in wicket, where are some recommended places to put logic (on load logic)
sorusunda da benzer bir açıklama var.

Component ve HttpRequest
Her Component sayfaya gelen Http isteğine direkt erişime sahip. Aşağıdaki Http isteğinin işlenmesini gösteren şekli buradan aldım.



Şekilden görülemese de Component sınıfının getRequest() metodu buradaki örnekte gösterildiği gibi kullanılırsa Component veya sayfadan HttpRequest parametrelerine erişmek çok kolay.

Wikcet ile URL
Wicket ile URL kullanarak parametre geçilmek isteniyorsa PageParameters sınıfı alan bir constructor kullanmak gerekir. Bu constructor'ı da http://localhost:8080/myappmypag?id/1 gibi bir URL ile çağırmak mümkün.

Wicket ile Ajax
Ajax ile hatırlanması gereken en önemli kural her Ajax çağrısı XML döndürmelidir. Unable to download file
sorusunda da açıklandığı gibi Ajax ile binary veri döndürülemez.

Aşağıdaki şekilde bir component'e Ajax davranışı eklemenin mümkün olduğu görülebilir.
onchange : Bu event <input type="text"> türü komponentler için fokus kaybedilince çağırılır.
AjaxEventBehavior: Bu sınıf tüm ajax sınıflarının temelini oluşturuyor. Örnek
WebMarkupContainer div=new WebMarkupContainer(...);
div.setOutputMarkupId(true);
div.add(new AjaxEventBehavior("onclick") {
 protected void onEvent(AjaxRequestTarget target) {
     System.out.println("ajax here!");
 }
}
AjaxFormSubmitBehavior : Bu sınıf ile tüm form submit edilir.
AjaxFormComponentUpdatingBehavior : Bu sınıfı sadece form komponentleri ile birlikte kullanılabilir.
AjaxCallDecorator: Form komponentlerine tıklanınca veya Ajax gerektiren bir iş yapılınca çalışacak olan Ajax kodunu atamak için kullanılır. Örneğin IndicatingAjaxLink gibi bir sınıfa eklenen decorator ile linke tıklanınca tüm ekranı bloke eden bir pencere çıkartmak mümkün. Sınıfın bir koşula bağlı olarak kullanım örneğini burada görebilirsiniz.

AbstractAjaxTimerBehavior: Bu sınıf ile timer durdurulmuş vaziyette yaratılır. Daha sonra kullanıcının isteğine göre başlatılabilir. Örneği buradan bulmak mümkün.
AjaxSelfUpdatingTimerBehavior: Bu sınıf ile herhangi bir komponent periyodik olarak güncellenebilir. Örneği buradan aldım.

Wicket ve IAjaxCallDecorator
IAjaxCallDecorator sınıfının kullanımını burada görebilirsiniz.

Wicket ve Behavior Render

beforeRender ve afterRender
Bu metodları kullanarak bir component ekranda gösterilmeden önce veya sonra işlem yapılabilir. Örneğin How to sort the choices in a Wicket dropdown according to the current user locale? sorusunda bir DropDownChoice eklenen Behavior sayesinde verilen listeyi sıralayabiliyor. Generating commented-out content with Wicket sorusunda da güzel bir örnek var.



Wicket ve JavaScript
call javascript or modify css from wicket panel class sorusunda IHeaderContributor arayüzü kullanılarak bir componenet için JavaScript veya CSS kullanabilme örneği verilmiş.


Wicket ve XHTML

XHTML içinde kullanılabilecek wicket tag'lerini burada bulmak mümkün. Benim kullandıklarımsa:

wicket:id - xhtml içindeki aynı id'ye sahip tag bir component ile eşleştirilir. Label gibi basit componentleri eklemek için kullanılır.
wicket:panel - sekme (tab) sayfaları gibi görünür/görünmez yapılabilen componentler için kullanılabilir
wicket:extend - wicket:child ile beraber kullanılır. Şablon sayfaları yaparken kullanılabilir. Şablon olmayan kısımları doldurmaya yarar
wicket:child - Şablon sayfası yaparken şablon olmayan kısımların neresi olduğunu işaretlemeye yarar
wicket:enclosure - Burada açıklandığı gibi ekrandaki bileşenleri gruplayıp, bazı bileşenlerin görünür olup olmamasını grup şeklinde kontrol etmeye yarar.

Wicket ve JSF
Wicket ile JSF'yi karşılaştırırken Wicket Components - have to add() every time? sorusuna verilen cevapta Wicket'ın JSF'nin aksine çok fazla non-html tag kullanmadığı yazılı ki bu doğru bir tesbit. Componentler add() metodu ile Java kodunun içinden ekleniyorlar.

Hiç yorum yok:

Yorum Gönder