2016-08-25 2 views
1

Я пытаюсь настроить Thymeleaf в моем приложении Spring MVC, но нечто идет не такThymeleaf конфигурации Spring

Вот мой pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>thymeleaf</groupId> 
    <artifactId>thymeleaf</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
     <spring.version>4.3.2.RELEASE</spring.version> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.thymeleaf</groupId> 
      <artifactId>thymeleaf-spring3</artifactId> 
      <version>3.0.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.thymeleaf</groupId> 
      <artifactId>thymeleaf-spring4</artifactId> 
      <version>3.0.1.RELEASE</version> 
     </dependency> 
    </dependencies> 
</project> 

и вот моя конфигурация

package thyme.leaf.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.thymeleaf.spring4.SpringTemplateEngine; 
import org.thymeleaf.spring4.view.ThymeleafViewResolver; 
import org.thymeleaf.templateresolver.ServletContextTemplateResolver; 

@Configuration 
@EnableWebMvc 
@ComponentScan("my.package") 
public class WebConfig extends WebMvcConfigurerAdapter { 

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

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

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

} 

проблема заключается в том, что в моих методах есть класс TemplateResolver. К сожалению, его вообще нельзя найти. Я осмотрел org.thymeleaf.templateresolver пакет, в котором я думаю, что это должно быть, но это не есть

может совет кто-то, что здесь не так, пожалуйста,

+2

* «но что-то пойдет не так» * ... Может объяснить, что пошло не так ... Добавить в StackTrace ... Более конкретно вместо сбрасывания кода здесь и ожидать нам точно нужно знать, что пошло не так. Одна вещь, почему у вас есть зависимости spring3 и spring4 ... Используйте 1 не оба (один для Spring 3 другой весны 4). –

+0

TemplateResolver класс не найден ни в spring3, ни в spring4 – VadOs

+0

У вас нет зависимости тимелеафа ... Только библиотека интеграции весны, добавьте тимелеаф. –

ответ

1

Наконец нашел правильное применение:

public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { 

     private ApplicationContext applicationContext; 

     public void setApplicationContext(ApplicationContext applicationContext) { 
      this.applicationContext = applicationContext; 
     } 

     @Bean 
     public ViewResolver viewResolver() { 
      ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
      resolver.setTemplateEngine(templateEngine()); 
      resolver.setCharacterEncoding("UTF-8"); 
      return resolver; 
     } 

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

     private ITemplateResolver templateResolver() { 
      SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
      resolver.setApplicationContext(applicationContext); 
      resolver.setPrefix("/WEB-INF/templates/"); 
      resolver.setTemplateMode(TemplateMode.HTML); 
      return resolver; 
     } 
    } 
+1

«SpringResourceTemplateResolver» должен быть компонентом ... Он реализует некоторые интерфейсы обратного вызова для весны (и вы можете удалить «ApplicationContextAware» из класса confiugration, поскольку он будет вызываться тогда («SpringResourceTemplateResolver» реализует тот же интерфейс). –

0

Я не уверен, но попробуйте изменить @ComponentScan("my.package") с @ComponentScan("thyme.leaf.config").

+0

спасибо за ответ, но это не поможет. ошибка возникает перед сканированием компонентов. Класс TemplateResolver не найден – VadOs

+0

Можете ли вы дать нам трассировку стека? –