2

我正在使用javax.validationbeanJSR-303验证。

调用 validate 方法后,我检查结果并在我的 GUI 中执行某些操作(例如突出显示我的表单中的失败字段)。

我的问题在这里:

MyBean.java

public class MyBean {

    @Size(min = 1, message = "Please insert title")
    private String title;

    @Size(min = 1, message = "Please insert author")
    private String author;

    @Size(min = 1, message = "Please insert publisher")
    private String publisher;

    // ... something
}

我的验证方法:

Set<ConstraintViolation<MyBean>> failures = this.validator.validate(bean);

之后,我遍历了我的失败对象:

for (ConstraintViolation<MyBean> constraintViolation : failures) {
        propertyPath = constraintViolation.getPropertyPath().toString();
        if (propertyPath.equals("title")) {
            Color bg = new Color(242, 242, 251);
            this.txtTitle.setBackground(bg);

        }
        // some else if for other attributes (for example: author)
        // add error to all error messages
        errorMessage += constraintViolation.getMessage();
}

现在我的问题是:这些对象在故障集中的顺序。这是不正确的。有没有获得正确顺序的解决方案?

谢谢大家

4

2 回答 2

3

不保证 Set 保持其元素有序(HashSet 不会)。因此,您不应依赖此顺序,并且您可能必须测试每个 ConstraintViolation 以便对其应用正确的过程,例如使用 constraintViolation.getPropertyPath()。

但理想情况下,您不必知道您正在处理哪个故障,您通常只需要知道它是一个 ConstraintViolation 并对其应用一般方法

于 2012-10-24T14:17:33.587 回答
0

实际上允许 Bean Validation 实现以任何顺序评估约束,除非由于组序列而需要顺序。这就是您首先获得一组 _ConstraintViolation_s 的原因。

于 2012-10-25T09:47:29.323 回答