2017-07-25 10 views
0

springmvc4.2.4 + mybatis3.2.8がうまく機能し、それは後にのみFreeMarkerのspringmvcのFreeMarkerのは

によって引き起こさコンソール

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer com.water.controller.HtmlGenController.freeMarkerConfigurer; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
    ... 22 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) 
    ... 24 more 
をFreeMarker2.2.23.The例外を追加することをautowireことができませんでしたあるフィールドfreeMarkerConfigurerをautowireませんでした。

のweb.xml:

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:spring/applicationContext-*.xml</param-value> 
    </context-param> 



<listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>wmall-manager</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:spring/spring-mvc.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>abc</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

春-mvc.xml

<context:property-placeholder location="classpath:config/resource*.properties"/> 
    <context:component-scan base-package="com.abc"/> 
    <mvc:annotation-driven/> 
    <mvc:default-servlet-handler/> 
<!--freemarker--> 
    <bean id="freemarkerConfig" name="freemarkerConfig" 
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
     <property name="templateLoaderPath" value="WEB-INF/ftl/" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/"/> 
     <property name="suffix" value=".jsp"/> 
    </bean> 

コントローラ:

@Autowired 
private FreeMarkerConfigurer freeMarkerConfigurer; 

コントローラから削除autowiredコード、ワークウェル

+0

名前を「freemarkerConfig」(クラスを指定せずに)のBeanを「ApplicationContext」から取得した場合はどうなりますか? ( 'ApplicationContextAware'を使って' ApplicationContext'を取得することができます) – ddekany

+0

@DdekanyがApplicationContextからBeanを取得できませんでしたが、私の問題を解決する方法が見つかりました – WaterCube

答えて

0

だけapplicationContext.xmlをするばねmvc.xml(のDispatcherServlet)から

<!--freemarker--> 
<bean id="freemarkerConfig" name="freemarkerConfig" 
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPath" value="WEB-INF/ftl/" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
</bean> 

そのコードを移動し、それは働く。 しかし、なぜspring-mvc.xmlにそのコードを置くのがうまくいくのかわかりません。

+0

Ah ... 'spring-mvc.xml'は'ApplicationContext.xml'の子コンテキストです。問題のあるautowiringは、その子コンテキストを使用しませんでした。 – ddekany

+0

@ddekanyありがとう – WaterCube