平台:JBoss AS 7。
我看到 JSR 303 bean 验证和请求范围的 CDI 托管 bean 的奇怪行为。系统似乎从不应用验证规则并且总是通过验证。
下面是一个代码片段。
@Named
@RequestScoped
class Person {
@Size(min=3, max=25, message="Please enter a valid name")
private String firstName;
//Getters and setters...
}
@WebServlet("/ValidationTest")
public class ValidationTest extends HttpServlet {
@Inject
Person p1;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
p1.setFirstName("A");
validate(p1);
Person p2 = new Person();
p2.setFirstName("B");
validate(p2);
}
public void validate(Object o) {
ValidatorFactory validatorFactory = null;
validatorFactory = Validation.buildDefaultValidatorFactory();
ValidatorContext validatorContext = validatorFactory.usingContext();
javax.validation.Validator beanValidator = validatorContext
.getValidator();
Set<ConstraintViolation<Object>> violations = beanValidator.validate(o);
System.out.println("Object is valid: " + violations.isEmpty());
}
}
输出是:
Object is valid: true
Object is valid: false
注入的 bean p1 被认为是有效的,这不应该发生。p2 的验证失败,这是预期的。如果我使 Person bean 依赖范围,则 p1 被正确地视为无效。我究竟做错了什么?
编辑:我已经复制了 TomEE 中的行为。所以,我一定做错了什么。