JSF

JSF Dersleri-Application Event Handling

Merhabalar arkadaşlar. Önceki derslerimizde Value Change Event ve Apllication Event konularına öğrenmiştik. Bu dersimizler birlikte artık olay yakalama konusunu bitireceğiz.

Application Event Handling bir projesinin yaşam döngüsüne müdahele etmek amacı ile kullanılır arkadaşlar. Açıkçası bu zamana kadar ben Application Event konusu üzerine hiç çalışmamıştım ve görmemiştim. Dolayısı ile anlaması ve anlatması zor bir konu olarak geldi bana.

JSF mimarisi içinde 3 tür uygulama olayı yer alıyor arkadaşlar. Bunlar

  • PostConstructApplicationEvent:Uygulama başladığı anda gerçekleşmesini istediğimiz durumları tanımlayabildiğimiz olay türüdür.
  • PreDestroyApplicationEvent:Uygulamaya sona erme komutu geldiğinde uygulama kapanmadan hemen önce yapılacak işleri tanımlayabildiğimiz olay türüdür.
  • PreRenderViewEvent:Uygulamamızdaki bir sayfa yüklenmeden hemen önce gerçekleşmesini istediğimiz durumları tanımlayabildiğimiz durumdur.

Bu 3 olayı yakalayabilmek için JSF geliştiricileri 2 yol belirlemişler. Birisi Method Binding diğeri ise System Event Listener arabirimi ve faces-config.xml dosyası kullanarak.

Şimdi olayı daha iyi kavrayabilmek için örnek projemizin üzerinden inceleyelim.

index.xhtml Kodu

Index sayfamız yüklenirken f:event etiketi devreye giriyor ve kendisinin listener özelliğine atanmış metodu çaığırıyor. Bı sırada bu metodun ne zaman çağırılacağını type özelliğinden anlıyor ve sayfa yüklenmeden hemen önce bu metodu (isAdmin) çağırıyor.

UserData.java Kodu

UserData sınıfımız içindeki isAdmin metodu javax.faces.event paketi altında yer alan ComponentSystemEvent sınıfı türünde bir parametre alıyor. Bu parametre bunun bir yaşam döngüsü sırasında çağırılacak metot olduğunu bildirir. Metot içinde veri adındaki sınıf değişkenine yeni değer atanıyor. Bu da sayfa yüklenirken bu metodun çaığırıldığını gösteren başka bir örnek. Metot projenin sistemi içinde role adındaki bir parametreyi arıyor ve bulursa istenilen sayfaya girmeye izin veriyor. Bulamaz ise isteğin reddildiği sayfaya yönlendiriyor.

CustomSystemEventListener.java Kodu

Bu sınıfımız içinde önceki ValueChangeEvent ve ActionEvent derslerimizden hatırlayacağınız üzere benzer bir iş yapıyoruz bir ara birim (interface) kullanıyoruz. Bu arabirim içindeki processEvent metodu bizim yaşam döngüsü içinde bazı noktaları yakalama müdahele etme şansı veriyor. Örneğin birinci if koşulunda olayın bir PostConstruct olayı olup olmadığına bakılıyor ve yakalanırsa PostConstruct olayının tetiklendiğini söylüyor. İstersek burada PostConstruct olayı tetiklendiği anda başka bir metot çağırımı vs. yapabiliriz. Benzer şekilde olay bir PreDestroy olayı yani uygulama kapanmadan hemen önce meydana gelen bir olay olursa uygulamanın sona erdiğini loglara yazdırıyoruz.

access-denied.xhtml Kodu

Bu sayfamız içinde sadece erişim engellendiğine dair bir mesaj ve UserData sınıfı içindeki veri değişkeninin tuttuğu değer yazdırılıyor.

faces-config.xml Kodu

faces-config.xml kodumuz içinde javax.faces.event.PostConstructApplicationEvent ve javax.faces.event.PreDestroyApplicationEvent sınıflarımızı tanıtıyoruz ve kendi yazdığımız yakalayıcı sınıfımızı tanıtıyoruz.

Ekran Çıktıları

Proje çalıştığı anda f:event etiketi devreye girdi ve kendine atanan isAdmin metodu çalıştı. O metot da role adında parametre bulamadığı için erişim engellendi sayfasına yönlendirdi bizi.

Proje çalıştığı anda f:event etiketi devreye girdi ve kendine atanan isAdmin metodu çalıştı. O metot da role adında parametre bulamadığı için erişim engellendi sayfasına yönlendirdi bizi.

Uygulama yüklenirken bir PostConstruct olayı tetiklenmiş. Bu da bize verildi.

Uygulama yüklenirken bir PostConstruct olayı tetiklenmiş. Bu da bize verildi.3.satıra dikkat edelim.

Uygulamayı sunucudan kaldırdığımda (undeploy) loga uygulamanın sonlandırıldığı yazıyor.

Uygulamayı sunucudan kaldırdığımda (undeploy) loga uygulamanın sonlandırıldığı yazıyor.

Bu yazıda da bu kadar arkadaşlar. Olay yakalama konusunu bu şekilde bitiriyoruz. Bu Application Event konusu uygulama sisteminde yaşanacak sorunları yakalamak içinde kullanılabilir ayrıca. Sunucuda hata meydana gelmesi, uygulamanın aniden devre dışı kalması vs. gibi durumlarda.

Gelecek yazıda görüşmek üzere arkadaşlar, sağlıcakla kalın.