我在JSF 2.0 Web应用程序中使用JSR 303 Bean验证,它可以正常使用注释。现在我想忽略注释并使用 validation.xml 文件配置验证规则,所以这就是我所做的(我使用的是eclipse动态Web项目):
在 WebContent / META-INF / validation.xml
下添加 validation.xml<?xml version="1.0" encoding="UTF-8"?>
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd"
>
<constraint-mapping>META-INF/validation/constraint-mapping.xml</constraint-mapping>
</validation-config>
然后在 WebContent / META-INF / validation / constraint-mapping.xml
下创建了文件 constraint-mapping.xml<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
<bean class="my.full.path.ValidationMB" ignore-annotations="true">
</bean>
</constraint-mappings>
有了这些配置,我想我的bean类ValidationMB中的注释将被忽略,但这没有发生!,这使我假设validation.xml文件没有被加载
任何想法?感谢。
环境:
来自规范:第4.4.6节。 XML配置:META-INF / validation.xml
除非通过调用明确忽略 Configuration.ignoreXMLConfiguration(),一个配置 考虑META-INF / validation.xml中可用的配置。这个 配置文件是可选的,但应用程序可以使用 改进一些Bean验证行为。如果不止一个 META-INF / validation.xml文件位于类路径中,a 引发ValidationException。
答案 0 :(得分:10)
要解决我的问题,我必须在项目 src 文件夹下创建一个META-INF文件夹,该文件夹以WEB-INF / classes / META-INF结尾。
Web应用程序的结构是:
ROOT
|_META-INF -- don't put validation.xml here
|_WEB-INF
|__ classes
|_META-INF
|__validation.xml
但我认为如果我将我的Web应用程序打包到一个jar文件中并在另一个项目中重用它可能不起作用,我会在以后告诉你。
答案 1 :(得分:1)
尝试将validation.xml直接放入 WEB-INF / 目录。
答案 2 :(得分:1)
我在寻找其他东西时偶然发现了这个,但是想向OP澄清发生了什么。实际上你需要将文件存在于META-INF / validation.xml;但是,这与classpath有关,这就是为什么当你把它放在WEB-INF / classes / META-INF / validation.xml下时它的工作原理。
更干净的方法是让文件放在那里。您的Eclipse项目应该已经以某种方式将源目录中的任何内容输出到WEB-INF / classes,否则将无法运行。但有时会对输出的内容进行过滤,因此可能会排除某些内容。您可能想检查您的src目录并确保它们没有排除。
举个例子,如果你有一个Maven war项目,你的所有java源都将放在src / main / java中,生成的类最终会出现在WEB-INF / classes目录中。对于包含非源文件的src / main / resources,会发生相同的情况。当我想要* .xml,* .properties等最终进入WEB-INF / classes时,我将它们放在src / main / resources中。对于您的示例,我将有一个src / main / resources / META-INF / validation.xml文件。
希望这可以帮助遇到这种情况并且感到困惑的其他人。