با استفاده از annotation یک validate Bean برای کامپوننتم تعریف کردم که وقتی فوکوس به عنصر دیگری از صفحه می ورد مقدار کامپوننت را چک می کند که مانند آن در دیتابیس نباشد این کار را انجام می دهد ولی وقتی مقدار کامپوننت را تغییر می دهم باز هم خطا بر روی صفحه است و صفحه submit نمی شود
public List<User> getUsers1() {
Session session = HibernateUtil.getSessionFactory().openSession();
userList = session.createCriteria(User.class).list();
session.close();
return userList;
}
و...
public class CheckUniqueValidation implements ConstraintValidator<CheckUnique, String> {
static List<User> userList;
static boolean unique = true;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
CheckUniqueValidation.userList = userList;
}
@Override
public void initialize(CheckUnique constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return checkUnique(value);
}
private static boolean checkUnique(String username) {
UserManagedBean umb = new UserManagedBean();
userList = umb.getUsers1();
for (User user : userList) {
if (user.getUsername().equals(username)) {
unique = false;
}
}
return unique;
}
}
و...
<h:inputText value="#{users.username}" id="username" label="نام کاربری" required="true" requiredMessage="نام کاربری را وارد کنید" >
<f:ajax event="blur" execute="@this" render="userError"/>
</h:inputText>
<h:message for="username" id="userError"/>
و..
@Target({METHOD,FIELD})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = CheckUniqueValidation.class)
public @interface CheckUnique {
String message() default"نام کاربری قبلا ایجاد شده است";
Class[] groups() default{};
Class<? extends Payload>[] payload() default{};
}