validation - GWT JSR303 验证、验证方法或使用自定义注释

标签 validation gwt hibernate-validator

我正在尝试使用 GWT 2.5 内置验证功能。我有一些复杂的验证。 Cross field validation with Hibernate Validator (JSR 303)建议我可以包含进行验证的方法或编写我自己的注释。但是,两者都不起作用。

public class PageData extends Serializable
    @NotNull(message="Cannot be null!")
    Boolean value

    @AssertTrue(message="isValid() is false!")
    private boolean isValid() {
        return false;
    }

    //Getters and Setters
}

bool 值已验证。然而,isValid() 永远不会被调用/验证。但为什么? 这是 GWt 特有的问题吗?

然后我尝试编写自己的注释,Cross field validation with Hibernate Validator (JSR 303)中的@FieldMatch示例使用 Apache Commons BeanUtils 中的 Beans.getProperty(),但我无法在 GWT 中使用它。有没有办法让这些复杂的注释在 GWT 中工作?

最佳答案

以下是我如何创建一个跨一个 bean 的多个字段工作的自定义验证。它检查当联系人 bean 的字段 ContactProfile 设置为 COMPANY 时,必须填写公司名称,否则当设置为 PERSON 时,必须填写名字或姓氏:

注释定义:

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidCompanyOrPersonValidator.class)
public @interface ValidCompanyOrPerson {

    String message() default "{contact.validcompanyorperson}";

    Class<?>[] groups() default {};

    Class<? extends Contact>[] payload() default {};
}

实现:

public class ValidCompanyOrPersonValidator implements ConstraintValidator<ValidCompanyOrPerson, Contact> {

    ValidCompanyOrPerson annotation;

    public void initialize(ValidCompanyOrPerson annotation) {
        this.annotation = annotation;
    }

    @SuppressWarnings("nls")
    public boolean isValid(Contact contact, ConstraintValidatorContext context) {
        boolean ret = false;
        if (contact.getContactProfile() == null) {
        } else if (contact.getContactProfile().equals(ContactProfile.COMPANY)) {
            ret = (contact.getCompanyName() != null);
        } else if (contact.getContactProfile().equals(ContactProfile.PERSON)) {
            ret = (contact.getGivenName() != null || contact.getFamilyName() != null);
        }
        return ret;
    }
}

现在我可以设置

@ValidCompanyOrPerson
public class Contact  {
 ...
}

我可以在客户端 (GWT) 和服务器端使用此验证。

希望有帮助......

关于validation - GWT JSR303 验证、验证方法或使用自定义注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17649513/

相关文章:

javascript - 如何在 JavaScript 中验证时间戳

hibernate - @Basic(optional = false) vs @Column(nullable = false) vs @NotNull

javascript - 我可以使用哪些 JavaScript 函数来检查电子邮件和电话号码是否有效,而无需借助 jquery 插件?

php - Laravel 更新模型,具有唯一的属性验证规则

java - GWT 更好地在单个服务或多个服务中包含所有方法

java - JSR 303 实现给出了 ClassCastException

java - 将默认 hibernate 消息委托(delegate)给约束组合中的验证失败

jquery - GWT ClientBundle CSS 不使用相对路径来引用图像

gwt - 为什么 GWT SimplePager 下一个/最后一个按钮仅在范围有限或行数不准确时才禁用?

java - 如何在 Wildfly 8.2 中使用升级版的 Hibernate Validator Jar?