Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 Beans验证多语言消息失败_Jsf 2_Bean Validation_Hibernate Validator - Fatal编程技术网

Jsf 2 Beans验证多语言消息失败

Jsf 2 Beans验证多语言消息失败,jsf-2,bean-validation,hibernate-validator,Jsf 2,Bean Validation,Hibernate Validator,我正在使用Spring3.1.0.RELEASE、JSF2.x、JPA2和HibernateProvider开发一个Web应用程序。该应用程序在Tomcat6.X上运行 web应用程序可以用不同的语言显示:en、es、fr 我在实体中使用bean验证。Hibernate Validator是提供程序,版本为4.2.0.Final 我在实体中有以下代码: @Email @Size(max=255) @Column(name = "email_ceo", length = 255)

我正在使用Spring3.1.0.RELEASE、JSF2.x、JPA2和HibernateProvider开发一个Web应用程序。该应用程序在Tomcat6.X上运行

web应用程序可以用不同的语言显示: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;
@电子邮件
@尺寸(最大值=255)
@列(name=“email\u ceo”,长度=255)
私人首席执行官;
@空空如也
@订购人(“职位ASC”)
@OneToMany(cascade=ALL,mappedBy=“site”,fetch=FetchType.EAGER)
私人名单;
我这样处理异常:

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));
            }
        }
试试看{
创建站点(新闻站点);
}捕获(ConstraintViolationException ex){
最终FacesContext FacesContext=FacesContext.getCurrentInstance();
对于(ConstraintViolationCV:ex.getConstraintViolations()){
facesContext.addMessage(null,新FacesMessage(FacesMessage.SEVERITY_ERROR,cv.getMessage(),null));
}
}
我使用

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

对于电子邮件,它工作良好,我有良好的语言信息

还有一件事,我不明白:

为什么
@NotEmpty
抛出ConstraintViolationException而
@Email
没有抛出?

谢谢你

  • 使用区域设置。我们使用的方法是,基本上在一个表中包含任何一种语言的区域设置字符串,并根据所使用的区域设置(en,fr)获取它

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

  • @电子邮件

    字段/属性。需要一个字符串

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

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


    @电子邮件不是Bean验证内置的约束,因此JSF2.0不会触发它。编写您自己的@Email约束(或包装Hibernate Validator提供的约束),以便Bean验证能够识别它。

    抱歉,我不确定您是否回答了我的问题。