JSF’de Çoklu Alanlar İçin Doğrulama – Validator

JSF, form verilerini doğrulama açısından gerçekten çok güçlü bir yapıya sahiptir. Kendi içinde de hazır birkaç doğrulama mekanizması bulunmakla birlikte onu asıl güçlü kılan kullanıcıların kendi doğrulama sınıflarını yazıp, daha sonra tekrar tekrar kullanabilmeleridir.

Bazı kullanıcı kayıt formlarında şifrelerin iki kere girilmesi istenir, böylece sisteme kayıt olan kullanıcının belirlediği şifre(ler) konusunda bir doğrulama yapılabilir. Girilen şifrelerin birbirlerine eşit olup olmadığının kontrolü çeşitli yöntemlerle yapılabilir. En basit yöntem olarak bir Javascript fonksiyonu kullanılabilir. Ancak JSF uygulamalarında, problemleri JSF ile çözmek yazılan uygulaman açısından çok daha doğru bir yöntem olacaktır.

Yukarıda belirtilen şifrelerin kontrolü durumu JSF’nin var olan validator metodları ile çözülemez. Bunun için özel bir validator class yazılması gerekir. Aşağıdaki örnekte şunlar yer alacaktır;

  1. JSF kayıt formu
  2. Validator class
  3. Uygulama için oluşturulmuş bir Java Bean Class
  4. Ve son olarak faces-config.xml dosyasında Validator ve Bean için gerekli tanımlamalar

 

Kayıt Formu (register.jsp)

Validator Class (PasswordValidator.java)

package net.lms.service.validator; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.component.UIInput; import javax.faces.context.FacesContext; import javax.faces.validator.Validator; import javax.faces.validator.ValidatorException; public class PasswordValidator implements Validator { public void validate(FacesContext arg0, UIComponent arg1, Object val) throws ValidatorException { String passwordId = (String) arg1.getAttributes().get("confirmPassword"); UIInput passwordInput = (UIInput) arg0.getViewRoot().findComponent(passwordId); String password = (String) passwordInput.getValue(); String confirm = val.toString(); if( password != null && password.length() != 0 && !password.equals(confirm) ) { throw new ValidatorException(new FacesMessage("Şifreler Tutarsız")); } } }

Bean Class (RegisterForm.java)

public class RegisterForm { protected String userName; protected String password; protected String password2; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPassword2() { return password2; } public void setPassword2(String password2) { this.password2 = password2; } public String doSimpleRegister(){ String returnVariable = "doRegister"; System.out.println("Kayıt için gerekli kodlar"); return returnVariable; } }

faces-config.xml

regForm net.lms.bean.RegisterForm session passwordValidator net.lms.service.validator.PasswordValidator

JavaRanch formumundan Bauke Scholtz‘e bu örnek konusunda yardımlarından dolayı teşekkür ederim.

Kaynak: http://balusc.blogspot.com/2007/12/validator-for-multiple-fields.html