2013-04-04 73 views
1

我尝试在GWT中使用bean验证。我按照本指南: https://developers.google.com/web-toolkit/doc/latest/DevGuideValidationGWT验证(JSR 303)SampleValidatorFactory

在编译的时候,我有以下错误:

ERROR: Could not load deferred binding result type 'com.google.gwt.sample.validation.client.SampleValidatorFactory' 

我可以让它工作,如果我有这种依赖性:

<dependency> 
    <groupId>com.googlecode.gwt-validation</groupId> 
    <artifactId>gwt-validation</artifactId> 
    <version>2.1</version> 
</dependency> 

但我发现它奇怪,因为这个依赖没有在指南中提到。

问题:由于GWT 2.5应该支持bean验证,为什么我需要这个额外的库?我究竟做错了什么?

我使用GWT 2.5.0

我的pom.xml包含以下依存关系:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.3.1.Final</version> 
    <type>jar</type> 
    <classifier>sources</classifier> 
</dependency> 

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.3.1.Final</version> 
    <type>jar</type> 
</dependency> 

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.0.0.GA</version> 
    <type>jar</type> 
    <classifier>sources</classifier> 
</dependency> 

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.0.0.GA</version> 
    <type>jar</type> 
</dependency> 

和我gwt.xml包含以下行:

<inherits name="org.hibernate.validator.HibernateValidator" /> 
<replace-with 
    class="com.google.gwt.sample.validation.client.SampleValidatorFactory"> 
    <when-type-is class="javax.validation.ValidatorFactory" /> 
</replace-with> 

在代码,我以这种方式得到Validator:

import javax.validation.Validator; 
... 
private static final Validator VALIDATOR= Validation.buildDefaultValidatorFactory().getValidator(); 

回答

2

您正在将第三方库gwt-validation与本地GWT验证混合使用。 gwt验证不是来自官方gwt团队或谷歌。如果您打算坚持原生gwt验证支持,您不应该在您的pom中使用以下内容。

<dependency> 
    <groupId>com.googlecode.gwt-validation</groupId> 
    <artifactId>gwt-validation</artifactId> 
    <version>2.1</version> 
</dependency> 

另请注意,您只有原生的gwt hibernate验证器支持,最高支持到4.1.0。 GWT Sample用法。 GWT本地休眠验证器source code

而且你可以把它作为

<!-- Hibernate bean validation binary for the server --> 

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.1.0.Final</version> 
    <exclusions> 
    <exclusion> 
     <groupId>javax.xml.bind</groupId> 
     <artifactId>jaxb-api</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>com.sun.xml.bind</groupId> 
     <artifactId>jaxb-impl</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

<!-- Hibernate bean validation source for the GWT client --> 

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.1.0.Final</version> 
    <classifier>sources</classifier> 
    <exclusions> 
    <exclusion> 
     <groupId>javax.xml.bind</groupId> 
     <artifactId>jaxb-api</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>com.sun.xml.bind</groupId> 
     <artifactId>jaxb-impl</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

<!-- Required by Hibernate validator because slf4j-log4j is 
    optional in the hibernate-validator POM 
--> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.1</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.1</version> 
</dependency> 
+0

这是:)我居然忘了创建自己的AbstractGwtValidatorFactory。这就是为什么当我使用gwt-validation的时候编译的原因。 – user2147970 2013-04-08 07:00:41