3 Replies Latest reply on Aug 13, 2007 11:55 PM by monkeyden


      I have a field, which has an unique constraint in the database. I am getting an Hibernate UniqueConstraint exception.

      I would like to asynchronously query the database as the user is entering the form and inform that the entry violates the unique constraint.

      How can I write a validator in Seam that will be invoked by s:validate on the field.

      Any pointers would be helpful.



        • 1. Re: validation

          I see three options:

          A) To catch the Exception in your code and then show the respective message.

           public void create(Object entity) throws MyDuplicatedException {
           try {
           } catch (EntityExistsException e) {
           throw new MyDuplicatedException();

          B) To use @Validator and @Name enabling a JSF Validator as Seam component.
          public class EqualValidator implements javax.faces.validator.Validator {
           public void validate(FacesContext facesContext, UIComponent uiComponent, Object value) throws ValidatorException {
          <h:inputSecret id="confirmPassword" value="#{user.confirmPassword}" required="true"
           maxlength="40" redisplay="true" tabindex="3" styleClass="input">
           <f:validator validatorId="equalValidator"/>

          C) To implement custom Hibernate Validator (it will work with s:validate).
          public class MyEmailValidator implements Validator<MyEmail> {
           public boolean isValid(Object value) {...
          @Target({METHOD, FIELD})
          public @interface MyEmail {
           String message() default "{validator.email}";
          public class User {
           private String email;

          I used A) and B) and C) in different scenarios, but at the moment I din't use C) to access database querying for some data. Maybe you can try making MyEmail class a Seam component (which will allows you to access SMPC).


          • 2. Re: validation

            Thank you. I seem to like approach B.

            • 3. Re: validation

              Or "D", use surrogate keys and don't let the user edit the PK.