Reputation: 1129
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
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