GWT和Hibernate验证程序

GWT和Hibernate验证程序,gwt,gwt-2.4,Gwt,Gwt 2.4,我在GWT2.4中使用Hibernate验证器时遇到问题。模块启动时出现错误: 00:00:05562[错误]延迟绑定结果类型 “javax.validation.ValidatorFactory”不应是抽象的 java.lang.RuntimeException:的延迟绑定失败 “javax.validation.ValidatorFactory”(您是否忘记继承 所需模块?) 模块配置: <module rename-to='start'> ... <inheri

我在GWT2.4中使用Hibernate验证器时遇到问题。模块启动时出现错误:

00:00:05562[错误]延迟绑定结果类型 “javax.validation.ValidatorFactory”不应是抽象的

java.lang.RuntimeException:的延迟绑定失败 “javax.validation.ValidatorFactory”(您是否忘记继承 所需模块?)

模块配置:

<module rename-to='start'>
  ...
  <inherits name="com.google.gwt.validation.Validation" />
  <!-- with this doesn't work too 
  <inherits name="org.hibernate.validator.HibernateValidator" />
  -->
  ...
</module>
<!-- hibernate validator -->
<inherits name="org.hibernate.validator.HibernateValidator" />
<replace-with class="net.marioosh.gwt.client.MyValidatorFactory">
  <when-type-is class="javax.validation.ValidatorFactory" />
</replace-with>
pom.xml

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.0.0.GA</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>4.2.0.Final</version>
</dependency>

javax.validation
验证api
1.0.0.GA
org.hibernate
休眠验证器
4.2.0.4最终版本

上次我尝试实现此功能时,我非常头痛,决定自己实现基于JSR303标准的GWT验证框架

无论如何,这仍然是一个实验性的框架,如维基所述:

警告 实验的API可能会改变。有些事情还是不管用。

所以,如果我是你,我就不会尝试让它工作。实现一些能够验证类的生成器

我也在这里尝试了这个框架:


。。。但再一次,完全没能让它为我工作!但这取决于你的情况,可能会很好。。。试着制作一个“非常”小的应用程序来测试不同的方法,看看什么适合你。

解决了这个问题
据我所知,我必须实现定制的
MyValidatorFactory
,并将其添加到项目hibernate validator sources.jar中

GWT模块配置:

<module rename-to='start'>
  ...
  <inherits name="com.google.gwt.validation.Validation" />
  <!-- with this doesn't work too 
  <inherits name="org.hibernate.validator.HibernateValidator" />
  -->
  ...
</module>
<!-- hibernate validator -->
<inherits name="org.hibernate.validator.HibernateValidator" />
<replace-with class="net.marioosh.gwt.client.MyValidatorFactory">
  <when-type-is class="javax.validation.ValidatorFactory" />
</replace-with>
还需要Hibernate验证程序源

<!-- local dependency -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-sources</artifactId>
    <version>4.2.0.Final</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/hibernate-validator-4.2.0.Final-sources.jar</systemPath>
</dependency>       

org.hibernate
hibernate验证程序源
4.2.0.4最终版本
系统
${project.basedir}/src/main/webapp/WEB-INF/lib/hibernate-validator-4.2.0.Final-sources.jar
使用:

public void onModuleLoad() {
    final ValidatorFactory factory = Validation.byDefaultProvider().configure().buildValidatorFactory();
    final Validator validator = factory.getValidator();
    ...

    Link l = new Link(....);
    Set<ConstraintViolation<Link>> violations = validator.validate(l);

    if(!violations.isEmpty()) {
           // validation fail
    } else {
           // validation success
    }
    ...
}
模块加载()上的公共void{
final ValidatorFactory=Validation.byDefaultProvider().configure().buildValidatorFactory();
final Validator Validator=factory.getValidator();
...
链路l=新链路(..);
设置冲突=validator.validate(l);
如果(!inflictions.isEmpty()){
//验证失败
}否则{
//验证成功
}
...
}

这在客户端和服务器端都有效吗?它是否正确地插入国际化消息?