Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.validation方法结果失败条目的验证顺序_Java_Hibernate_Validation_Bean Validation - Fatal编程技术网

javax.validation方法结果失败条目的验证顺序

javax.validation方法结果失败条目的验证顺序,java,hibernate,validation,bean-validation,Java,Hibernate,Validation,Bean Validation,我正在使用javax.validation进行JSR-303bean验证 调用validate方法后,我查看结果并在GUI中执行一些操作(例如突出显示表单中的失败字段) 我的问题是: MyBean.java public class MyBean { @Size(min = 1, message = "Please insert title") private String title; @Size(min = 1, message = "Please insert

我正在使用
javax.validation
进行
JSR-303
bean验证

调用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);
Set failures=this.validator.validate(bean);
之后,我迭代我的failures对象:

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();
}
for(ConstraintViolation ConstraintViolation:failures){
propertyPath=constraintViolation.getPropertyPath().toString();
if(propertyPath.equals(“标题”)){
颜色bg=新颜色(242、242、251);
此.txtTitle.setBackground(背景);
}
//如果为其他属性(例如:author),则为其他
//将错误添加到所有错误消息中
errorMessage+=constraintViolation.getMessage();
}
现在我的问题是:故障集中这些对象的顺序。这是不对的。 是否有解决方案来获得正确的订单


多亏了所有的

一个集合不能保证其元素保持有序(HashSet不能)。因此,您不应该依赖于此顺序,您可能必须测试每个ConstraintViolation以对其应用正确的过程,例如使用ConstraintViolation.getPropertyPath()


但理想情况下,您不必知道正在处理的故障,您通常只需要知道它是一个ConstraintViolation,并对其应用一个通用方法,实际上允许Bean验证实现以任何顺序评估约束,除非由于组序列而需要一个顺序。这就是为什么一开始你会收到一组“约束性暴力”的原因。

我正是按照你写的那样做的,但问题仍然是:错误信息变得无序,这不专业。(我还想在表单的第一个文本字段上设置一个焦点,并发生错误。)因此我认为这取决于您的UI技术,它本身应该依赖于您选择的Beans验证实现。搜索JSR303与您的UI框架的集成,或者告诉我们有关您的上下文和需求的更多信息