Wednesday, August 26, 2009

RichFaces Tips And Tricks

Karşılaştığım kadarı ile bazı richfaces notlarımı sizinle paylaşmak istiyorum.

• a4j:outputPanel tagini ajaxRendered=true ile kullanırsak..bu component in içine
koyulmuş bütün compononentlerin, ekrandaki herhangi bir ajax tetiklemesi ile update
edilecegi anlamina gelir.yani her ajax tetiklemesi için reRender içinde bu componenti koymakla uğraşmak yerine böyle bir panelin içine aliriz.Örnek vermek gerekirse, sayfamızda mesajlari göstermemiz için bir message componenti var diyelim ve ekrandaki her ajax olayı için buranın güncellenmesi gerekir. Böyle bir durumda bu
message component ini a4j:outpıtPanel içine koyarsak, her ajax olayının reRender
özelligi içerisine message componentinin id sini vermek zorunda kalmayız.

• Diyelim ki böyle bir panel açtık,ajaxRendered=true dedik içine de ajax olaylarında
güncellenecek componenetleri yerleştirdik. Fakat sayfamıza da öyle bir ajax olayı
eklemek istiyoruz ki sadece bu olay için bu panelin güncellenmemesi gerektigini
düşünüyoruz. bu durumda; ajax olayını yazdıgımız yerde limitToList=true dersek
sadece ilgili olayın reRender özelligi içerisine koydugumuz componentler
güncellencektir.

• Ekrandan tetiklenen ajax olayları, server tarafina her defasında bir diğer istek
bitmeden gönderilebilir. Bir input alan düşünün ve onkeyup olayına bir ajax
bağladınız. İlgili ajax componenti basilan her tuşu server a yollar ve sizin o karakter ile ilgili logic blogunuzu çaliştirir. Ama ilk giden istegin ilk geri dönecegini garanti etmez. Böyle bir karışıklığa sebebiyet vermemek için, kullanılan ajax componenti üzerine eventsQueue özelline bir isim veririz ve bu isimle server a gönderilen istekler gönderilme sırasına göre server tarafinda çaliştirildiktan sonra ekrana geri gönderilir. Bir iş bitmeden diğer işlem yapılmaz.

• Aynı şekilde requestDelay özelliği mevcuttur ajax eventlerini tetikleyen richfaces
componentlerinde.( , , ,
, ) Bu da server tarafina gönderilecek requestlerin kaç
milisaniye aralıklarla gönderilmesi gerektiğini belirlememize yardımcı olur.

• ignoreDupResponses özelliği ise serverdan gelen response ların sıralı bir şekilde
ekranı güncellemesi sağlar. Fakat bu özellik server a request gönderme sırasında
henüz dönmeyen bir request olsa bile ikinci requestin gönderilmesini engellemez. Bu
özelliğin tek faydası ekrana gelen response ları sıralı bir şekilde işlemek ve ekran
güncellemesi sırasında olası bir karışıklığı önlemektir.

• Bir diğer özellik olan timeout özelliği ise girilen değer kadar(ms) süre geçtikten sonra hala server tarafindan bir response dönmüyorsa beklemeyi sürdürmeden ilgili işi bitirmek için kullanılır.

• ajaxSingle=true diyerek geçtiğimiz ajax olayları sadece ajaxi tetikleyen componentin ve bu compoenentin içerisindeki parametrelerin değerlerini server a gönderir. Aynı form içerisinde bulunmasina rağmen diğer hiçbir componentin değeri bean üzerine yapişmaz. Fakat tabi bu özellik combo larda filan geri dönüşte request mapte value aradıgından ötürü bazı problemlere yol açabilir. Bu durumu önlemek için de böyle gereksinimi olan componentleri a4j:region componenti içerisine alirsak bu component içerisindeki componentler de, ajaxSingle=true demiş bile olsak değerlerine ilgili scope daki bean üzerine yapıştıracaktır.

• Düşünün ki bir form’unuz var ve içerisinde inputlariniz. Size sadece bu input
değerlerinin valid olup olmadığı lazim. Yani form içerisini validate etmek istiyorsunuz fakat ilgili input değerlerinin de bean üzerine yapişmasini istemiyorsunuz. Bu durumda ilgili ajax olayına bypassUpdates=true demelisiniz.

• Ekraninizdan bir ajax request gönderdiğinizde yine ekranda mevcut olan bir bölümü
güncellemek istersiniz genelde. Fakat bazı durumlardan server tarafindan ilgili işlemle bağlantılı bir şekilde veri göndermeniz gerekebilir. Böyle durumlarda kullanılmak üzere ajax componentlerinde data adlı bir özellik bulunmaktadır. Örnek kullanım:oncomplete="alert(data)"/>.Örnekte görüldüğü üzere istemci tarafina bu şekilde custom veriler ulaştırılabilir.

• a4j:log : Bu component sayfaya yerleştirildiğinde ekrana herhangi bir görüntü
getirmez fakat ekran geldikten sonra ctrl + shift + L kombinasyonu ile ekrana bir
popup getirilir ve içerisinde request data, response data, DOM tree vs gibi debug
bilgileri gösterilir. Ayrıca defaılt tuş kombinasyonu
Şeklinde düzenlenebilir. Bu durumda . ctrl + shift + F ile ekran gösterilecektir.

• a4j:status: Bu component ekrandaki ajax olaylari sirasinda kullaniciya bilgi vermek için kullanılabilir. Ajax olayinin başlamasini ve bitmesini bu component üzerinden kontrol ederek ilgili işlemlerimizi gerçekleştirebiliriz. Örneğin yeni kayit eklediğimiz bir sayfa olsun ve bu sayfa ajax event ile gönderilip kayit işlemi gerçekleştirilsin. Kullanıcı kaydet butonuna bastıgı zaman kaydetme işlemi başlayacaktır fakat bu önemli bir işlev oldugu için veri kaybını önlemek adına önlem almak gerekmektedir. Kullanıcı kaydet butonuna basıp ajax event ini tetiklediği zaman ekrana bir modal window açip “bekleyiniz..” dersek ve ajax event bittigi zaman bu window u kapatirsak gayet şık ve güvenli bir insert sayfamız olmuş olur. Örnek vermek gerekirse;



Şeklinde bir modal window koyduktan sonra sayfamıza bir a4j:status eklersek;
onstop="Richfaces.hideModalPanel('loadingPanel');">
Ajax event tetiklendiği zaman bu status devreye girer ve ekranı bloklayarak işlemin
yapıldıgına dair bir resim görüntüler.Ayrıca bu component in for özelligi ile de sadece ilgili AjaxContainer için çalişmasi sağlanir. for=ilgiliAjaxContainerId

1 comment:

Selman said...

Bir güzel özellik de "process" özelliği. Bu özellik sayesinde efendim işte şu şu id li componentleri de ajax request'ine dahil et diyebiliyoruz. Bu durum ajaxSingle=true kullandığımız kimi durumlarda gayet pratik bir çözüm oluveriyor.

Powered By Blogger