1

我遇到了 Hibernate Validator 3.1.0.GA 的问题,它没有在属性文件 ValidationMessages.properties 中查找自定义验证消息。

为了说明这个问题,我创建了一个小示例项目,您可以通过 git 获取它:

git clone https://bitbucket.org/sstein/validation-example.git

获得源代码树后,您可以通过运行我创建的单元测试来测试问题:

mvn test

有 3 个测试用例, validateDescriptionTest(com.example.MyClassTest) 失败:

预期:<[描述的长度必须在 1 到 10 个字符之间。]> 但是是:<[{descriptionMsg}]>

我还添加了一个测试用例,验证资源包是否可以通过单元测试访问,并且可以正常工作。

有谁知道为什么这个失败?

PS:我完全重写了我最初的问题,添加了示例,以便您可以自己尝试。

4

2 回答 2

2

ValidationMessages.properties 的最终位置应该在 WEB-INF/classes 中。它如何到达那里取决于您使用的构建系统以及您如何配置它。在 NetBeans IDE 中,当我创建 Web 应用程序时,我可以将 ValidationMessages.properties 放入默认的 Java 包中。

如果您使用 Maven 作为构建工具,请将属性放入 /src/main/resources 目录,这样 Maven 会将其复制到 WEB-INF/classes 中。

要确保属性文件就位,请将 .war 文件作为 ZIP 打开并查看一下。另一种判断方法是检查 JSF 是否接收到内部的验证器消息。

对于像@Size 这样的JSR-303 消息,上面的属性键应该是正确的。

于 2012-06-14T10:25:22.417 回答
1

所以解决方案很简单,由 Hibernate 的 Hardy Ferentschik 发现

在 Hibernate Validator 3.1.0.GA 中,bundle 必须称为ValidatorMessages.properties而不是ValidationMessages.properties

于 2012-06-15T12:45:39.750 回答