JSF

JSF Dersleri-Event Handling-ValueChangeEvent (ValueChangeListener Interface İle)

Merhaba arkadaşlar. Metot İle Değer Değişimi Yakalama yazımızda bir selectOneMenu bileşenimizin valueChangeListener özelliğine değer değişimini yakalayacak bir metot atayarak değer değişimini yakalamıştık. Bu yazımızda ise bu değer değişimini bir ara birim (interface) kullanarak yakalayacağız.

Önceki yazımızdaki UlkeVeKodBean sınıfımızı ve index.xhtml dosyamızı aynen bu yazıda da kullanabiliriz. Fazladan olarak bir Java sınıfı daha ekleyeceğiz projemize.

UlkeDegerDinleyici.java Kodu

Bu sınıfımızda değer değişimini yakalamak için ValueChangeListener arabirimini sınıfımıza uyguluyor ve arabirim içindeki processValueChange metodunu Override ederek değişim yakalandığında ne olması gerektiğini bildiriyoruz. Burada dikkat ederseniz biraz karmaşık gelebilecek bir kod yapısı mevcut.  Bu bir managed bean içinden diğerine erişmek için kullanılan bir yoldur. Ben bu yazıyı yazarken şu kodu da denedim:

Bu kod ile uygulama istediğimiz gibi çalıştı.  İki yolla da set metodunu çağırabiliyoruz.

Gelen ülke kodunu alıyor ve UlkeVeKodBean sınıfındaki ulkeKodu değişkenine atıyoruz ülke kodunu.

index.xhtml Kodu

Önceki yazımızdaki işlemden farklı olarak burada selectOneMenu bileşenimizin içinde <f:valueChangeListener> etiketini kullanacağız. Bu etiket type özelliğine atanmış olan sınıf içinde processValueChange metodunu arar ve  o metodu tetikler.

UlkeVeKodBean.java Kodu

Bu sınıfımız hakkında gerekli anlatımları önceki yazıda yapmıştım arkadaşlar.

Ekran Çıktıları

Screen Shot 2015-06-22 at 17.41.48

Screen Shot 2015-06-22 at 17.42.50

Bu yazıda da bu kadar arkadaşlar. Gelecek yazıda Action Event Handling konusunu işleyeceğiz. Sağlıcakla kalın.

  • Burakerk

    Jsf bilgilerimi tazelemek adına çalışmalarını takıp ediyorum. Küçük eklemeler yapacağım.

    UlkeVeKodBean u=new UlkeVeKodBean();
    u.setUlkeKodu(event.getNewValue().toString());

    Bunun çalıştığını söylemişsin ama bir ManagedBean’in bizim tarafımızdan “new” kulanarak oluşturulmaması gerektiğini duymuştum. (Godoro’dan Önder Teker Jsf eğitim videolarında bahsediyor. ‘Bean’leri oluşturan biz değiliz bağlamın kendi’ diye)

    Ek olarak valueChangeListener ‘PROCESS_VALIDATIONS’ Phase’ında tetiklendiği için henüz Model update edilmemiş oluyor. Henüz ‘UPDATE MODEL VALUES’ Phase’ına girmemiş oluyor.
    Eğer biz
    ulkeKodu.setUlkeKodu(event.getNewValue().toString()); kodunu
    şu şekilde değiştirirsek
    ulkeKodu.setUlkeKodu(“girdi”);
    JSF sayfasındaki h:inputText etiketinin “girdi” olarak değişmediğini görürüz.

    Başlangıçta bende tam olarak ne olduğunu anlamadım ama biraz araştırmadan sonra bu kanıya vardım.
    Kaynak : BalusC
    http://stackoverflow.com/questions/11879138/when-to-use-valuechangelistener-or-fajax-listener

    Bu güzel kaynağı hazırladığın için sana da teşekkürler İlkay.