正确的方法来获取Bean验证错误并向用户显示相应的消息

时间:2019-06-07 05:30:08

标签: jpa jsf bean-validation

我正在使用JPA和Bean验证的项目中工作。我想向用户显示有关失败验证的友好消息,并且需要根据用户的区域设置以不同的语言显示这些消息。

我正在使用@NotNull@Size之类的标准注释以及一些自定义类级别的验证。

在使用实体之前,我使用以下代码验证实体:

        Validator validator = validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<Company>> constraintViolations = validator.validate(company);

        if (constraintViolations.size() > 0) {
            Set<String> violationMessages = new HashSet<String>();

            for (ConstraintViolation<Company> constraintViolation : constraintViolations) {
                violationMessages.add(constraintViolation.getPropertyPath() + ": " + constraintViolation.getMessage());
            }
        }

如果验证失败,我会看到验证失败的消息和字段,但是我不知道如何将这些验证消息转换为友好的消息以及不同的语言(基于用户的Locale

我有以下问题:

  • 实现此目标的正确方法是什么?
  • 我知道JPA在持久化之前会根据验证自动检查实体。如果我手动(使用上面的代码)执行验证,我是否会运行验证过程两次?
  • 如果我使用的JSF在更新模型之前也执行验证,那么我将运行验证过程3次(1. JSF,2。上面的代码和3. Wildfly / JPA在持久/合并之前)?
  • 如果以上代码在EJB中运行,如何将验证错误传递给表示层(例如JSF)?
  • 我需要将ConstraintViolations列表返回到表示层吗? -是否需要为每次验证创建一个例外?

谢谢

0 个答案:

没有答案