Search code examples
javahibernatevalidationhibernate-validator

Hibernate validator for ComboBox


How to validate a jComboBox for user to select any item other than the default item?

I need to check whether the user didn't select any item. So the jComboBox value will be "Please select a scurity question"

enter image description here

In my model class,

@NotEmpty(message="Please fill the username field!")
public String getUsername() {
    return this.username;
}

public void setUsername(String username) {
    this.username = username;
}

@NotEmpty(message="Please fill the password field!")
public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getSeqQue() {
    return this.seqQue;
}

public void setSeqQue(String seqQue) {
    this.seqQue = seqQue;
}

What will be the hibernate validator annotation to add in getSeqQue() to validate my jComboBox?


Solution

  • To validate your JComboBox with custom message simply you can make custom constraint validator.

    See following example:

    MyModel.java

    public class MyModel {
    
        @ValidComboBox //this is the annotation which validates your combo box
        private String question;
    
        //getter and setter
    }
    

    ValidComboBox.java //annotation

    import java.lang.annotation.*;
    import javax.validation.*;
    
    @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = ComboBoxValidator.class)
    @Documented
    public @interface ValidComboBox {
    String value = "Please select a security question";
    
    String message() default "Please select a security question.";
    
    Class<?>[]groups() default {};
    
    Class<? extends Payload>[]payload() default {};
    }
    

    ComboBoxValidator.java

    import javax.validation.*;
    public class ComboBoxValidator implements ConstraintValidator<ValidComboBox, String> {
    
    private String value;
    
    @Override
    public void initialize(ValidComboBox arg0) {
        this.value = arg0.value;
    
    }
    
    @Override
    public boolean isValid(String question, ConstraintValidatorContext arg1) {
        if(question.equalsIgnoreCase(value)){
            return false;
        }
        return true;
    }
    }
    

    Add items to your jComboBox like this:

    JComboBox<String> jComboBox = new JComboBox<>();
    jComboBox.addItem("Please select a scurity question");
    jComboBox.addItem("Question 1");
    jComboBox.addItem("Question 2");
    

    And following lines you need to add when you perform action to validate:

    ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
    Validator validator = validatorFactory.getValidator();
    
    String question = jComboBox.getSelectedItem().toString();
    MyModel model = new MyModel();
    model.setQuestion(model);
    
    Set<ConstraintViolation<MyModel>> constraintViolations = validator.validate(model);
    
    if (!constraintViolations.isEmpty()) {
            String error = "";
            for (ConstraintViolation<MyModel> constraintViolation : constraintViolations) {
                    error += constraintViolation.getMessage();
                    JOptionPane.showMessageDialog(null, error);
            }
    }
    

    It will display Please select a security question message if you try to send request without choosing question.