Проверка компонентов с помощью JBoss Errai

Я хочу создать приложение GWT с инфраструктурой Errai, но у меня возникают проблемы с привязкой и проверкой данных.

Мой пом.xml

<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-Validation и HibernateValidator:

<inherits name="org.jboss.errai.validation.Validation" />
<inherits name="org.hibernate.validator.HibernateValidator" />

Нет неразрешенных зависимостей, я уже дважды проверил это.

Когда я пытаюсь запустить приложение с помощью mvn gwt:run, я получаю следующую ошибку:

 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)

Вот почему Bootstrap дает сбой, а приложение выдает исключение onModuleLoad и не запускается.

Если я удалю 2 модуля проверки, я смогу запустить приложение без ошибок.

Я использую учебник Errai с версией 3.0.1 FINAL.

Спасибо за вашу помощь :)


РЕДАКТИРОВАТЬ:

Я решил ошибку, добавив

<inherits name="org.jboss.errai.ui.nav.Navigation" />

в мой app.gwt.xml, но теперь я столкнулся со следующей проблемой с этим исключением:

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


person Modern Labs    schedule 29.07.2014    source источник


Ответы (1)


Да, это правильно. Вам не нужно создавать свой собственный ValidationFactory. Эррай сделает это за вас. Вы можете просто @Inject a Validator.

Я подготовил версию руководства по Errai с использованием 3.0.1.Final, которая показывает именно это (следуя инструкциям из справочное руководство). Я разместил проект на GitHub.

Последняя ошибка, которую вы вставили, не содержит достаточно информации, чтобы выяснить, почему это не удается для вас. Однако вы должны увидеть больше информации об ошибках в консоли devmode.

person Christian Sadilek    schedule 30.07.2014
comment
Работает ли проверка Errai с последними версиями GWT и Errai, а именно 2.7.0 и 3.1.1.Final? Или Errai 3.1.1.Final работает даже с версией 2.7.0 GWT? - person quarks; 23.01.2015