Seam Unique Validator
Bu yazıda seamde nasıl validator yazılır, sistemde unique olması gereken değerler nasıl validatorle kontrol edilir onu göreceğiz. Öncelikle bir web sitesinde unique olması gereken değerler neler olabilir onu düşünelim, benim ilk aklıma gelen kullanıcı adı, tc kimlik numarası, mail adresi gibi değer olabilir. Bu örnekte username unique olması sağlanacaktır.
Ben Seam 2.0 kullanıyorum, aşağıda vereceğim örnek seam 2.2 de çalışan bir örnektir, jsf 1.2 de çalışır yanlız validator yazmak jsfde seamden biraz daha farklıdır.
Bu validatorde sisteme yeni username kaydedilirken veritabanında bu username varmı die kontrol ediliyor aynı zamanda userın diğer bilgileri güncellenirkende sistemde unique mi diye kontrol edilir. Sözü uzatmadan örnek validatorümüzü yazalım:
package com.konsey.pys.action.validator;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.faces.Validator;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import com.konsey.pys.action.core.user.UserSupport;
import com.konsey.pys.entity.core.authenticator.User;
import com.konsey.pys.entity.personel.Personel;
@Name("usernameValidator")
@Validator
@Transactional
@BypassInterceptors
public class UsernameValidator implements javax.faces.validator.Validator,Serializable {
public void validate(FacesContext facesContext, UIComponent component, Object value) throws ValidatorException {
User instance = ((UserSupport) Component.getInstance("userSupport")).getInstance();
EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
try {
User cc1 = (User) entityManager.createQuery("FROM User user WHERE user.username = :username")
.setParameter("username", value).getSingleResult();
if (cc1 != null && !(cc1.getId() == instance.getId())){
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,"must_be_unique","must_be_unique"));
}
} catch (NoResultException nre) {
// that's fine - this name is unique.
}
}
}
Evet validator kodumuz bu kadar kullanımına gelecek olursak:
<h:inputText value="#{userSupport.instance.username}" required="true" maxlength="30">
<f:validator validatorId="usernameValidator"/>
<s:validate/>
</h:inputText>
İşte bu kadar bunları sistemizde unique olması gereken diğer alanlar için kolaylıkla uygulayabilirsiniz.
Teşekkürler.
İyi Çalışmalar.
Etiketler :


