JSF

JSF Dersleri – Validators 2 – Custom Validator

CFESiYuUMAEwk8p

Merhabalar arkadaşlar. Validator Tags JSF kütüphanesi içindeki f: etiekti ile kullanabileceğimiz doğrulayıcıları öğrenmiştik. Bu yazıda ise kendimize ait özel (custom) doğrulayıcı yazmayı öğreneceğiz.

Bu yazıda örnek uyglama olarak önceki yazıda e-posta için kullandığımız doğrulama işini özel dönüştürücü ile nasıl yapabiliriz ona bakalım.

ValidatorClass.java

Doğrulayıcı olarak kullanacağımız ValidatorClass sınıfının doğrulayıcı olabilmesi için 2 şeye ihtiyacı vardır. Birincisi sınıfın @FacesValidator notasyonu ile işaretlenmesi, ikincisi sınıfın Validator arabirimini uygulaması (implementation) . @FacesValidator notasyonuna parametre olarak verilen String XHTML içinde tanımlayıcı olarak kullanılacaktır.

Sınıfımız içinde bir emailPattern String’i tanımladık. Bu String’i java.util.regex.Pattern sınıfından bir pattern objesi elde ederken şablon olarak kullanacağız.

Pattern patternObject nesnesi sınıfın yapılandırıcı metodu içerisinde Pattern sınıfındaki static bir metot olan compile metoduna emailPattern String’ini parametre olarak verilerek oluşturuluyor ve az sonra validate metodu içinde eşleşme kontrolü için kullanılacak.

Matcher matcherObject eşleşme kontrolü sonucunu tutacak ve buna göre hata fırlatma ya da fırlatmama işlemi yapacak. Eğer siz Matcher nesnesi kullanmak istemezseniz if bloğuna

kodunu yazarak da test edebilirsiniz.

Validator arabiriminin içinde tanımlı olan validate metodu form gönderildiğinde doğrulama işlemini yapacak metotdur. Benim anladığım kadarı ile bu metodun ilk iki parametresi JSF mimarisi içinde verinin XHTML’den alınıp bu metoda getirilmesi işlemini gerçekleştiriyor ve üçüncü parametre de gelen veriyi temsil ediyor. Metot içerisinde patternObject nesnesi ile Pattern sınıfındaki matcher metodunu çağırıyoruz ve metoda Object tipinde gelen o nesnesini toString metodu ile String’e çevirerek gönderiyoruz. matcher metodu patternObject’in sahip olduğu şablona göre gelen veriyi test ediyor (şablonumuz emailString) ve test sonucu matcherObject’de tutuluyor. matcherObject nesnesi ile çağırdığımız ve true ya da false değeri dönen macthes metodu eşleşmenin doğrulanıp doğrulanmadığını kontrol ediyoruz.

Eğer doğrulama başarısız olursa bir FacesMessage nesnesi oluşturup bu nesneyi parametre olarak vererek bir ValidatorException fırlatabiliriz.

CustomValidatorBean.java

CustomValidatorBean sınıfı içinde kullanıcıdan alınan e-posta adresini tutacak bir String email değişkeni ve onun get-set metotları yer alıyor.

index.xhtml

index sayfamız içerisinde yazmış olduğumuz özel doğrulayıcıyı (custom validator) istersek bileşenizimin validator özelliği ile istersek de bileşenimizin açma-kapatma etiketleri arasında f:validator etiketi ile kullanabiliriz. Bileşenimizin validator özelliğini kullandığımızda özel doğrulayıcı sınıfında @FacesConverter notasyonuna parametre olarak verilen String değeri validator özelliğine atamamız yeterli. Eğer f:validator etiketini kullanırsak da bu etiketin validatorId [email protected] notasyonuna parametre olarak verilen String değeri atamamız yeterli. Örnek kod içerisinde alternatif kullanım olan f:validator yorum satırı yapılarak kapatılmıştır.

Ekran Çıktısı

Geçersiz bir e-posta adresi girip doğrulayıcının çalışmasını test ediyorum.

Screen Shot 2016-02-17 at 11.24.18 1

Gönder dediğimde Custom Validator sınıfı içindeki hata mesajı ekrana yazdırılıyor.

Screen Shot 2016-02-17 at 11.26.29

Doğru olan bir e-posta adresi girip gönder dediğimde ekrana herhangi bir hata yazdırılmıyor.

Screen Shot 2016-02-17 at 11.27.48

Burada opsiyonellikten gelen hakla @ işaretinden önce iki noktalı yazım da yapılabilinir. [email protected] girip gönder dediğimde herhangi bir hata ile karşılaşmıyoruz.

Screen Shot 2016-02-17 at 11.29.32

Bu yazıda bu kadar arkadaşlar. Başka bir yazıda görüşene kadar sağlıcakla kalın. Görüşmek üzere.