【问题标题】:Hibernate validator for ComboBox组合框的休眠验证器
【发布时间】:2016-07-16 12:57:24
【问题描述】:

如何验证 jComboBox 以供用户选择默认项目以外的任何项目?

我需要检查用户是否没有选择任何项目。所以 jComboBox 的值将是“请选择一个安全问题”

在我的模型类中,

@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;
}

在 getSeqQue() 中添加什么休眠验证器注释来验证我的 jComboBox?

【问题讨论】:

    标签: java hibernate validation hibernate-validator


    【解决方案1】:

    要使用自定义消息验证您的 JComboBox,您可以制作自定义约束验证器。

    参见以下示例:

    MyModel.java

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

    ValidComboBox.java //注解

    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;
    }
    }
    

    像这样将项目添加到您的 jComboBox:

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

    当您执行验证操作时,您需要添加以下几行:

    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);
            }
    }
    

    如果您尝试在不选择问题的情况下发送请求,它将显示请选择安全问题消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2019-03-20
      • 1970-01-01
      相关资源
      最近更新 更多