#Thymeleafとは
- SpringBootで標準で使われるテンプレートエンジン
- テンプレートエンジンを使うことでWebアプリケーション(MPA)を作るのに必要な機能が追加される
- 例えばHTMLファイルの中に
[[]]
でJavaの変数名[[${modelValue}]]
を書くことができる - これで画面が表示される時に、HTMLファイルがテンプレートとなって、Placefolder(=置き換わる場所)をSpringフレームワークが書き換えてくれる
- テンプレートの機能を果たすものをThymeleafという
##使用方法
- build.gradleファイルのdependenciesにThymeleafが定義がされていることを確認
dependencies {
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
}
##テンプレートファイルの呼び出し
- デフォルト設定では
/resources/templates/【Controller の戻り値】.html
配下にテンプレートファイルを記述 - 以下の例はMain.javaで
HelloController
を呼び出し、クラスパス以下のテンプレートファイルが探索されsrc/main/resources/templates/hello.html
がテンプレートファイルとして利用される。
main.java
package sample;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
HelloController.java
package sample.thymeleaf.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello Thymeleaf!!");
return "hello";
}
}
hello.html
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Hello Thymeleaf</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
##テンプレートファイルでテキストを埋め込み
-
th:text=【出力する値】
そのタグのテキスト要素を出力 <h1 th:text="'hello world'"></h1>
-
<h1>[['hello world!!']]</h1>
で直接テンプレート上に値を出力することもできる
HelloController.java
package sample.thymeleaf.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
hello.html
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Hello Thymeleaf</title>
</head>
<body>
<h1 th:text="'hello world'"></h1>
</body>
</html>