2016-08-11 14 views
1

どこにでも問題の解決策が見つかりませんでした。 私は春のWebフローフォームで検証を行いたいと考えています。私は 設定でバリデータを設定する必要がありますが、それは別の設定ファイル にあり、適切なbeanが見つからないようです。ここで成功した注射をするにはどうすればいいですか? 私が知る限り、Autowiringは、Beanをバリデータ参照に挿入する必要があります。 おそらく、設定クラスを読み込む順番と関係がありますか?バネ - バランサを注入する際に問題が発生する

WebConfig.java:

@Configuration 
@Import(godziszewski.patryk.ElectronicsStore.config.FlowConfiguration.class) 
@EnableWebMvc 
@ComponentScan(basePackages = "godziszewski.patryk") 
public class WebConfig extends WebMvcConfigurerAdapter { 
    .... 
    @Bean 
    public LocalValidatorFactoryBean validator() 
    { 
     LocalValidatorFactoryBean lv = new LocalValidatorFactoryBean(); 
     lv.setValidationMessageSource(messageSource()); 
     return lv; 
    } 
} 

FlowConfiguration.java:

@Configuration 
public class FlowConfiguration extends AbstractFlowConfiguration { 
    @Autowired 
    Validator validator; 
    .... 

    @Bean 
    public FlowBuilderServices flowBuilderServices() 
    { 
     FlowBuilderServices fbs = new FlowBuilderServices(); 
     fbs.setValidator(validator); 
     return fbs; 
    } 
} 

エラー私は取得しています:

org.springframework.beans.factory.UnsatisfiedDependencyException: 
    Error creating bean with name 'flowConfiguration': 
    Unsatisfied dependency expressed through field 'validator': 
    No qualifying bean of type [org.springframework.validation.Validator] found for dependency [org.springframework.validation.Validator]: 
    expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; 
    nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No qualifying bean of type [org.springframework.validation.Validator] found for dependency [org.springframework.validation.Validator]: 
    expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

イム使用して春4.3.2.RELEASE

ただし、多分私は何か間違ったことをやっている、

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flowBuilderServices' defined in class path resource [godziszewski/patryk/ElectronicsStore/config/FlowConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: The ViewFactoryCreator is required 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:381) 
    at godziszewski.patryk.ElectronicsStore.config.FlowConfiguration$$EnhancerBySpringCGLIB$$b65e14d6.flowBuilderServices(<generated>) 
    at godziszewski.patryk.ElectronicsStore.config.FlowConfiguration.flowRegistry(FlowConfiguration.java:25) 
    at godziszewski.patryk.ElectronicsStore.config.FlowConfiguration$$EnhancerBySpringCGLIB$$b65e14d6.CGLIB$flowRegistry$3(<generated>) 
    at godziszewski.patryk.ElectronicsStore.config.FlowConfiguration$$EnhancerBySpringCGLIB$$b65e14d6$$FastClassBySpringCGLIB$$e5741e7e.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) 
    at godziszewski.patryk.ElectronicsStore.config.FlowConfiguration$$EnhancerBySpringCGLIB$$b65e14d6.flowRegistry(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 24 more 
Caused by: java.lang.IllegalArgumentException: The ViewFactoryCreator is required 

全FlowConfigurationクラスコード:私は、私はエラーを取得するFlowAdapter.classからバリデータの依存関係を削除しますか?

package godziszewski.patryk.ElectronicsStore.config; 



import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.validation.Validator; 
import org.springframework.webflow.config.AbstractFlowConfiguration; 
import org.springframework.webflow.definition.registry.FlowDefinitionRegistry; 
import org.springframework.webflow.engine.builder.support.FlowBuilderServices; 
import org.springframework.webflow.executor.FlowExecutor; 
import org.springframework.webflow.mvc.servlet.FlowHandlerAdapter; 
import org.springframework.webflow.mvc.servlet.FlowHandlerMapping; 


@Configuration 
public class FlowConfiguration extends AbstractFlowConfiguration { 


    @Bean 
    public FlowDefinitionRegistry flowRegistry() { 
     return getFlowDefinitionRegistryBuilder() 
      .setBasePath("/WEB-INF/flows") 
      .setFlowBuilderServices(flowBuilderServices()) 
      .addFlowLocationPattern("/**/*-flow.xml") 
      .build(); 
    } 
    @Bean 
    public FlowExecutor flowExecutor() { 
     return getFlowExecutorBuilder(flowRegistry()).build(); 
    } 

    @Bean 
    public FlowHandlerMapping flowHandlerMapping() 
    { 
     System.out.println("flowconfig"); 
     FlowHandlerMapping fh = new FlowHandlerMapping(); 
     fh.setFlowRegistry(flowRegistry()); 
     return fh; 
    } 
    @Bean 
    public FlowHandlerAdapter flowHandlerAdapter() 
    { 
     FlowHandlerAdapter fh = new FlowHandlerAdapter(); 
     fh.setFlowExecutor(flowExecutor()); 
     return fh; 
    } 
    @Bean 
    public FlowBuilderServices flowBuilderServices() 
    { 
     FlowBuilderServices fbs = new FlowBuilderServices(); 
     //fbs.setValidator(validator); 
     return fbs; 
    } 
} 

私は.setFlowBuilderServices(flowBuilderServices())メソッドを削除した場合、すべてが正常

EDITを作品:私は@Configuration注釈フォームフローの設定クラスを削除することによって、この作業を取得するために管理し、今では次のようになります。

//@Configuration 
public class FlowConfiguration extends AbstractFlowConfiguration { 

    @Autowired 
    Validator validator; 

    ... 
    @Bean 
    public FlowBuilderServices flowBuilderServices() 
    { 
     System.out.println(validator.toString()); 
     FlowBuilderServices fbs = new FlowBuilderServices(); 
     fbs.setValidator(validator); 
     return fbs; 
    } 

これで、注入されたLocalValidatorBeanをこのクラスに使用できます。

+0

を定義する必要があります'to' public Validator validator() 'を呼び出します。助けてくれますか? – vsminkov

+0

同じ結果:--( によって引き起こされる:org.springframework.beans.factory.NoSuchBeanDefinitionException:[org.springframework.validation.Validator]タイプの適格なBeanが依存関係[org.springframework.validation.Validator]に見つかりません: –

+0

問題と思われますあなたの問題をローカルで再現することはできません:(答えはあなたのコードと同じですので、私の回答は削除されます – vsminkov

答えて

0

最後に、Validator beanへの参照を持つFlowBuilderServicesが必要であると解釈します。

)あなたが変更署名 `公共LocalValidatorFactoryBeanバリデータを(試用できます。これは、FlowBuilderServices

public class FlowBuilderServices{ 
@Autowired 
Validator validator 

... 
} 

内Autowiredタグを使用することによって達成することができ、次いでFlowConfigurationであなただけの豆

@Bean 
public class FlowBuilderServices flowBuilderServices() 
    { 
     FlowBuilderServices fbs = new FlowBuilderServices(); 
     return fbs; 
    } 
+0

私はそれを理解しました。インポートアノテーションとコンフィグレーションアノテーションの両方を使用していたので、Springがコンポーネントをスキャンし、FlowConfigurationクラスを見つけ、フィールドをオートワイヤして、一致するオブジェクトを見つけることができませんでした。 –

関連する問題