2013-04-04 71 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