8
什么是调用类级别JSR-303的约束,从JSF做跨字段验证并已返回的消息会转换到的FacesMessage并依赖于特定的JSF的最佳方式基于ConstraintViolation中的PropertyPath的组件?跨字段验证与JSF在线消息与JSR 303
rich:graphValidator接近,但它并没有利用的PropertyPath的。也许MyFaces的extval可以让我接近,但是在bean验证的时候似乎有一个额外的框架层,所以我避免了这个。
这里有一个简单的例子:
public enum Type {
ROAD, RACE;
}
public class Driver {
private String name;
private Type licenseType;
...
}
@CarConstraint
public class Car {
@Valid
private Driver driver;
private Type carType;
private String make;
private String model;
...
}
public class CarConstraintValidator implements ConstraintValidator<CarConstraint, Car>{
@Override
public void initialize(CarConstraint constraintAnnotation) {}
@Override
public boolean isValid(Car value, ConstraintValidatorContext context) {
if(value == null) {return true;}
if(Type.RACE.equals(value.getCarType())
&& !Type.RACE.equals(value.getDriver().getLicenseType())) {
context.buildConstraintViolationWithTemplate("Driver of this car must have a racing license")
.addNode("driver")
.addNode("licenseType")
.addConstraintViolation();
return false;
}
return true;
}
}
图片一种形式,对赛车和车手的信息输入。如果驱动程序具有许可证类型ROAD并且汽车具有汽车类型RACE,则将理想的结果是,将所得到的验证消息转换成连接到许可证类型输入的FacesMessage,因为添加了该消息使用Bean Validation的流利api到该节点。
非常令人沮丧的是,这不是开箱即用的。我正在考虑构建我自己的解决方案:-( – 2011-04-12 20:10:41
)你让我感觉好多了,我并不是唯一一个正在寻找这个的人,我也在考虑创建我自己的组件,也许是从丰富的灵感:graphValidator和/或使用丰富的面孔CDK。早些时候,我在RichFaces论坛上开始了类似的讨论:http://community.jboss.org/thread/164600 – ghilton 2011-04-13 21:53:17
正如你所提到的,ExtVal可以做到这一点,我们正在使用它来处理这种用例 – 2011-08-30 02:36:58