【问题标题】:Customize bean validation message?自定义 bean 验证消息?
【发布时间】:2011-10-09 01:47:00
【问题描述】:

关于 JSF 中使用的 bean 验证的两个愚蠢问题:

  1. 如何从输出消息中删除前缀form1:userName:

    <h:message for="userName" /> 
    

    得到:

    form1:userName: Please enter a valid username (5-20 characters)
    

    我也想把名字form1:userName翻译成User Name,这样的翻译很容易实现,但是我找不到在哪里构建消息。

  2. 我有一个自定义验证器,比如@CreditCard,它的默认消息是{foo.bar.BadCreditNumber}

    @interface CreditCard {
        String message() default "{foo.bar.BadCreditNumber}";
    }
    

    并且消息在类路径中的foo/bar/ValidationMessages.properties 中定义。现在我怎样才能让这个属性文件加载到每个页面中?

【问题讨论】:

    标签: jsf bean-validation


    【解决方案1】:

    关于 1:错误消息的格式取决于属性 javax.faces.validator.BeanValidator.MESSAGE 必须在应用程序的资源包中指定,如下所示:

    javax.faces.validator.BeanValidator.MESSAGE={1}: {0}
    

    占位符{0} 指的是由 Bean Validation 运行时创建的错误消息,{1} 指的是组件标签。因此,如果您不想在消息中包含标签,只需确保占位符 {1} 不包含在该属性值中。

    更多信息可以在JSF 2 spec. 3.5.6.3 部分找到。

    关于 2:正如 BalusC 所说,只需将 ValidationMessages.properties 放入类路径的根目录即可。更多信息也可以在 Hibernate 验证器reference guide 中找到。

    【讨论】:

      【解决方案2】:
      1. 使用输入元素的label 属性。

        <h:inputText label="User name" ... />
        

        另见JSF 2.0 tutorial - Finetuning validation

      2. ValidationMessages.properties 文件必须放在类路径根目录中,没有任何包。另见JSR-303 specification

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-24
        • 2012-12-12
        • 2011-09-29
        • 2013-12-08
        • 2014-05-31
        • 2011-10-21
        相关资源
        最近更新 更多