Thymeleafの設定(spring bootなし)

## はじめに

spring bootに頼らないspring MVCプロジェクトのThymeleafの設定方法の備忘録

プロジェクト自体の作成方法は下記を参考
[MavenによるSpringプロジェクトの作成 #Java - Qiita](https://qiita.com/shirobako2016/items/622e417bf35dd2be1e4d)

## 設定方法

### pom.xml

pom.xmlには下記を追加してあげればよい

```xml
    ・・・
    <!-- Thymeleaf -->
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring6</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
    ・・・
```

## Java Config設定

Thymeleaf用のJava Configの設定です

下記３つをBeanに登録します

```java
package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;

@Configuration
public class ThymeleafConfig {

    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        // テンプレートファイルがどのディレクトリの配下にあるかを指定。ここでは、/WEB-INF/views/配下
        templateResolver.setPrefix("/WEB-INF/views/");
        // 接尾字が何かを指定。ここでは.html
        templateResolver.setSuffix(".html");
        // テンプレートの種類は何かを指定。ここでhtml
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }

    @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");
        // ViewResolverを使う順序を指定。JSPより先にする。
        viewResolver.setOrder(1);
        return viewResolver;
    }

}

```

今回作成したプロジェクトでは初めにJSPを読み込ませているため`viewResolver.setOrder(1)`を設定することでJSPより優先させています。JSPとの共存も可能なようです。

`@Import`を利用してDispatcherServletクラスにThymeleafConfig.classをインポートします

``` java
package com.example.demo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
@ComponentScan("com.example.demo")
@Import(ThymeleafConfig.class)
public class DispatcherServlet implements WebMvcConfigurer {
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp();
    }
}
```

あとは通常通り/WEB-INF/views/配下にhtmlファイルを作成してThymeleafが利用できます。

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テスト</title>
</head>
<body>
    <div th:text="${title}">テキスト</div>
</body>
</html>
```