【问题标题】:Beans validation mutli lang message failBeans 验证多语言消息失败
【发布时间】:2012-04-03 17:49:20
【问题描述】:

我正在使用 Spring 3.1.0.RELEASE、JSF 2.x、JPA 2 和 Hibernate Provider 做一个 Web 应用程序。该应用程序在 Tomcat 6.X 上运行。

网络应用可以用不同的语言显示:en、es、fr。

我在我的实体中使用 bean 验证。 Hibernate Validator 是提供者,版本 4.2.0.Final。

我在一个实体中有以下代码:

@Email
    @Size(max=255)
    @Column(name = "email_ceo", length = 255)
    private String emailCeo;

@NotEmpty
    @OrderBy("position ASC")
    @OneToMany(cascade = ALL, mappedBy = "site", fetch = FetchType.EAGER)
    private List<SiteLanguage> langs;

我这样处理异常:

try {
            siteService.createSite(newSite);
        } catch (ConstraintViolationException ex) {
            final FacesContext facesContext = FacesContext.getCurrentInstance();
            for (ConstraintViolation<?> cv : ex.getConstraintViolations()) {
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, cv.getMessage(), null));
            }
        }

我使用&lt;h:messages /&gt;在模板中显示错误信息

我如何获得翻译后的消息,因为cv.getMessage() 总是返回英文消息?

对于它工作正常的电子邮件,我有很好的语言信息。

还有一件事,我不明白:

为什么 @NotEmpty 会抛出 ConstraintViolationException 而@Email 不会?

谢谢。

【问题讨论】:

    标签: jsf-2 bean-validation hibernate-validator


    【解决方案1】:
    1. 使用区域设置。我们过去的做法是,基本上将任一语言的区域设置字符串放在一个表格中,并根据使用的区域设置(en,fr)抓取它。

    2. 使用catch Exception e 捕获所有异常,然后查看抛出的类型。它将按顺序捕获它并从 catch 子句继续。因此,第一个抛出的异常将退出 try 块。

    @电子邮件

    字段/属性。必须是字符串。

    检查指定的字符串是否为有效的电子邮件地址。

    http://docs.jboss.org/hibernate/validator/4.0.1/api/org/hibernate/validator/constraints/Email.html

    【讨论】:

    • 抱歉,我不确定你是否能回答我的问题。
    【解决方案2】:

    使用 cv.getMessageTemplate() 代替 cv.getMessage(),它会返回在约束消息模板中定义的,例如。 {javax.validation.constraints.NotNull.message}。如果您有 ResourceBundle 文件(提供 Bean Validation 实现或您自己的),那么您可以使用所选语言检索消息。

    @Email 不是 Bean Validation 的内置约束,所以它不会被 JSF 2.0 触发。编写您自己的 @Email 约束(或包装 Hibernate Validator 提供的那个),以便 Bean Validation 识别它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多