我遇到了一些bean验证问题。
基本上我有一个互联网用户可以创建新个人资料的表格,他们必须在那里输入他们的用户名。
我想验证关于:
的用户名对于子弹3,我编写了自己的自定义验证器@UserExists。问题是如果前两个验证器中的任何一个失败,我不希望运行此验证器。
我发现在我的UserExists验证器上使用@GroupSequence可以解决序列问题,但如果其他验证器之一报告输入无效,JSF仍会调用我的验证器。我可以以某种方式检查其他验证器之一是否已经失效?
这是我想要检查的属性:
@Size(min = 3, max = 20)
@Pattern(regexp = "[A-Za-z]+[A-Za-z0-9]*")
@UserExists(message = "User already exists")
private String username;
自定义验证器具有以下属性:
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = UserExistsValidator.class)
@GroupSequence({Size.class, Pattern.class})
public @interface UserExists
答案 0 :(得分:2)
@GroupSequence
注释旨在在托管约束的bean上指定。由于必须指定成员验证组,而不是单个约束。
所以你的例子可能会像那样实现:
@GroupSequence({Form.class, ExpensiveChecks.class})
public class Form {
public interface ExpensiveChecks {}
@Size(min = 3, max = 20)
@Pattern(regexp = "[A-Za-z]+[A-Za-z0-9]*")
@UserExists(message = "User already exists", groups=ExpensiveChecks.class)
private String username;
}
这样就重新定义了Form
类型的默认组序列。首先验证@Size
和@Pattern
约束。只有在成功后,才会验证@UserExists
约束(属于ExpensiveChecks
组的一部分)。
您可以在Hibernate Validator reference guide和Bean验证specification中了解有关组序列和默认组序列重新定义的更多信息。