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框架的集成,或者告诉我们有关您的上下文和需求的更多信息