自定义bean验证消息?

时间:2011-10-09 01:47:00

标签: jsf bean-validation

关于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中定义。现在如何在每个页面中加载此属性文件?

2 个答案:

答案 0 :(得分:4)

关于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 Validator reference guide中找到。

答案 1 :(得分:2)

  1. 使用input元素的label属性。

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

    另见JSF 2.0 tutorial - Finetuning validation

  2. ValidationMessages.properties文件必须放在类路径根目录中,不包含任何包。另请参阅JSR-303 specification