0

平台: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 中的行为。所以,我一定做错了什么。

4

0 回答 0