PrabaharanKathiresan
PrabaharanKathiresan

Reputation: 1129

No qualifying bean of type 'org.thymeleaf.spring4.SpringTemplateEngine' available

I try to build simple Maven springMVC application. When I tried to deploy the application to my server below exception is thrown.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'viewResolver' defined in com.phapp.configuration.WebConfiguration: Unsatisfied dependency expressed through method 'viewResolver' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.thymeleaf.spring4.SpringTemplateEngine' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

below is my maven thymeleaf dependency

<dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>

my springmvc version is 4.3.7.RELEASE.

I verified my maven dependencies are included in my deployment assembly. I am using java configuration to create springmvc

*

@Configuration
public class PhAppDispatcherServlet extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] {RootConfig.class};
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{WebConfiguration.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}

*

My rootconfig class

@Configuration
public class RootConfig { }

my Webconfig class

@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"com.phapp"},excludeFilters = {@Filter(type=FilterType.ANNOTATION,value = EnableWebMvc.class)})
public class WebConfiguration extends WebMvcConfigurerAdapter{

    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver thymeleaf = new ThymeleafViewResolver();
        thymeleaf.setTemplateEngine(templateEngine);
        return thymeleaf;
    }

    @Bean 
    public TemplateEngine templateEngine(TemplateResolver templateResolver){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

    @Bean
    public TemplateResolver templateResolver(){
        TemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setPrefix("WEB-INF/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        return templateResolver;
    }
}

why the server could not find SpringTemplateEngine bean?

No qualifying bean of type 'org.thymeleaf.spring4.SpringTemplateEngine' available:

Upvotes: 2

Views: 4741

Answers (1)

Denys Verizhenko
Denys Verizhenko

Reputation: 11

Because Spring looking for a bean with type SpringTemplateEngine or any other subtype. So you need to change return type in public TemplateEngine templateEngine(TemplateResolver templateResolver) to SpringTemplateEngine or it's subclass.

Upvotes: 0

Related Questions