首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于JBoss Errai的Bean验证

基于JBoss Errai的Bean验证
EN

Stack Overflow用户
提问于 2014-07-29 10:12:13
回答 1查看 516关注 0票数 2

我想用Errai框架制作一个GWT应用程序,但是我在数据绑定和验证方面遇到了一些问题。

我的pom.xml

代码语言:javascript
复制
<dependency>

  <groupId>org.jboss.errai</groupId>

  <artifactId>errai-validation</artifactId>

  <version>${errai.version}</version>

</dependency>

<dependency>

  <groupId>javax.validation</groupId>

  <artifactId>validation-api</artifactId>

  <scope>provided</scope>

</dependency>

<dependency>

  <groupId>javax.validation</groupId>

  <artifactId>validation-api</artifactId>

  <classifier>sources</classifier>

  <scope>provided</scope>

</dependency>

<dependency>

  <groupId>org.hibernate</groupId>

  <artifactId>hibernate-validator</artifactId>

  <version>4.2.0.Final</version>

  <scope>provided</scope>

</dependency>

<dependency>

  <groupId>org.hibernate</groupId>

  <artifactId>hibernate-validator</artifactId>

  <version>4.2.0.Final</version>

  <scope>provided</scope>

  <classifier>sources</classifier>

</dependency>

我的app.gwt.xml包括Errai验证和HibernateValidator模块:

代码语言:javascript
复制
<inherits name="org.jboss.errai.validation.Validation" />
<inherits name="org.hibernate.validator.HibernateValidator" />

没有未解决的依赖项,我已经对此进行了双重检查。

当我尝试使用mvn : run运行应用程序时,我得到以下错误:

代码语言:javascript
复制
 java.util.concurrent.ExecutionException: org.jboss.errai.ioc.rebind.ioc.exception.UnsatisfiedDependenciesException:  @> org.jboss.errai.ui.nav.client.local.Navigation
- field org.jboss.errai.codegen.meta.MetaField:org.jboss.errai.ui.nav.client.local.Navigation.stateChangeEvent could not be satisfied for type: org.jboss.errai.ioc.client.lifecycle.api.StateChange
Message: can't resolve bean: org.jboss.errai.ioc.client.lifecycle.api.StateChange<java.lang.Object> ( @Default )
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.jboss.errai.config.rebind.AsyncGenerators$FutureWrapper.get(AsyncGenerators.java:112)
    at org.jboss.errai.config.rebind.AsyncGenerators$FutureWrapper.get(AsyncGenerators.java:86)
    at org.jboss.errai.config.rebind.AbstractAsyncGenerator.startAsyncGeneratorsAndWaitFor(AbstractAsyncGenerator.java:100)
    at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCGenerator.generate(IOCGenerator.java:58)
    at com.google.gwt.core.ext.IncrementalGenerator.generateNonIncrementally(IncrementalGenerator.java:40)
    at com.google.gwt.dev.javac.StandardGeneratorContext.runGeneratorIncrementally(StandardGeneratorContext.java:657)
    at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:41)
    at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:79)
    at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:276)
    at com.google.gwt.dev.shell.ShellModuleSpaceHost.rebind(ShellModuleSpaceHost.java:141)
    at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:595)
    at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:465)
    at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:49)
    at com.google.gwt.core.shared.GWT.create(GWT.java:57)
    at com.google.gwt.core.client.GWT.create(GWT.java:85)
    at org.jboss.errai.ioc.client.Container.bootstrapContainer(Container.java:64)
    at org.jboss.errai.ioc.client.Container.onModuleLoad(Container.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:406)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
    at java.lang.Thread.run(Thread.java:744)

这就是为什么引导程序失败,应用程序抛出onModuleLoad异常而没有启动的原因。

如果我删除了两个验证模块,我就能够启动应用程序,而不会出现任何错误。

我正在使用Errai教程的3.0.1最终版本。

(谢谢你的帮助:)

编辑:

我通过添加

代码语言:javascript
复制
<inherits name="org.jboss.errai.ui.nav.Navigation" />

到我的app.gwt.xml,但是现在我遇到了下一个问题,除了这个例外:

代码语言:javascript
复制
java.lang.RuntimeException: Deferred binding failed for 'org.jboss.errai.validation.client.ValidatorFactoryImpl$GwtValidator' (did you forget to inherit a required module?)    
at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:53)     
at com.google.gwt.core.shared.GWT.create(GWT.java:57)   
at com.google.gwt.core.client.GWT.create(GWT.java:85)   
at org.jboss.errai.validation.client.ValidatorFactoryImpl.createValidator(ValidatorFactoryImpl.java:11)     
at com.google.gwt.validation.client.AbstractGwtValidatorFactory.getValidator(AbstractGwtValidatorFactory.java:90)   
at org.jboss.errai.validation.client.ValidatorProvider.get(ValidatorProvider.java:37)   
at org.jboss.errai.ioc.client.BootstrapperImpl$28.getInstance(BootstrapperImpl.java:432)    
at org.jboss.errai.ioc.client.BootstrapperImpl$28.getInstance(BootstrapperImpl.java:1)  
at org.jboss.errai.ioc.client.container.IOCDependentBean.getInstance(IOCDependentBean.java:96)  
at org.jboss.errai.ioc.client.container.IOCDependentBean.getInstance(IOCDependentBean.java:87)  
at org.jboss.errai.ioc.client.container.SyncToAsyncBeanManagerAdapter$1.getInstance(SyncToAsyncBeanManagerAdapter.java:148)     
at org.jboss.errai.ui.nav.client.local.spi.GeneratedNavigationGraph$2.produceContent(GeneratedNavigationGraph.java:69)  
at org.jboss.errai.ui.nav.client.local.Navigation.maybeShowPage(Navigation.java:304)    
at org.jboss.errai.ui.nav.client.local.Navigation.navigate(Navigation.java:249)     
at org.jboss.errai.ui.nav.client.local.Navigation.navigate(Navigation.java:230)     
at org.jboss.errai.ui.nav.client.local.Navigation.navigate(Navigation.java:225)     
at org.jboss.errai.ui.nav.client.local.Navigation.goTo(Navigation.java:191)     
at org.jboss.errai.ui.nav.client.local.DefaultNavigationErrorHandler.handleError(DefaultNavigationErrorHandler.java:27)     
at org.jboss.errai.ui.nav.client.local.Navigation.goTo(Navigation.java:193)

还有另一个缺少的模块吗?

我是正确的,Errai正在创建ValidationFactory并注入正确的实例?因此,我不必像下面这样创建自己的ValidationFactory:

GWT验证教程

EN

回答 1

Stack Overflow用户

发布于 2014-07-30 17:05:50

是的,没错。您不必创建自己的ValidationFactory。艾拉会为你这么做的。您可以简单地@注入一个Validator。

我已经使用3.0.1.Final编写了Errai教程的一个版本,它显示了这一点(按照参考指南的说明)。我已经把这个项目放在GitHub上了。

您粘贴的最后一个错误包含的信息不足以调查为什么失败的原因。但是,您应该会在devmode控制台中看到更多的错误信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25012907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档