spring整合thymeleaf

官方文檔入口:https://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.htmlhtml

一、首先須要引入thymeleaf的依賴(據官網文檔,thymeleaf-spring3與thymeleaf-spring4用法基本一致)java

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

二、配置thymeleaf的模板解析器、模板引擎與視圖解析器web

官方文檔以xml做爲配置方法,由於不是很方便,此處使用java方式進行配置spring

import javax.servlet.ServletContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.context.ServletContextAware;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

@ComponentScan(basePackages="com.example.demo.controller")
public class ServletConfig implements ServletContextAware {

    private ServletContext servletContext;

    @Override
    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    /* 加載thymeleaf模板 */
    @Bean
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(this.servletContext);
        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        resolver.setCacheable(true);
        return resolver;
    }
/* 模板引擎,渲染並返回結果 */
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    /* 視圖解析器 */
    @Bean
    public ThymeleafViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");
        return viewResolver;
    }
}

在配置模板解析器的時候,我選擇的是實現ServletContextAware接口以獲取ServletContext,並以此爲參數建立ServletContextTemplateResolver。此處應該還能夠用另外一種方式進行配置:app

public class WebConfig implements ApplicationContextAware
{
    private ApplicationContext applicationContext;

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

    //加載 Thymeleaf 模板
    @Bean
    public SpringResourceTemplateResolver templateResolver()
    {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(this.applicationContext);
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        return templateResolver;
    }
}

三、測試:ide

@RequestMapping("/test")
    public String test(Model model) throws IOException {
        List<User> userList = baseService.queryUsers();
        model.addAttribute("userList", userList);
        return "test";
    }
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>測試頁面</title>
</head>
<body>
    <ul th:each="prop : ${userList}">
      <li th:text="${prop.userName}"></li>
    </ul>
</body>
</html>

四、此外,html頁面常須要引入靜態文件,爲了飲用方便以及避免靜態文件路徑錯誤致使的異常,須要經過WebMvcConfigurer接口設置靜態文件的根路徑,避免路徑錯誤致使的異常測試

@EnableWebMvc
public class ServletConfig implements WebMvcConfigurer,ServletContextAware {
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/templates/static/");
    }
}

注:須要在類上加入@EnableWebMvc註解表示啓用java config,不然此方法不會生效。this

相關文章
相關標籤/搜索