Spring Bootで扱うThymeleafについて。
Thymeleafはhtmlを生成するテンプレートエンジン。
独自のタグを使うのではなく、通常のHTMLのタグに独自の属性を追加していく方式となっている。
これにより、変換前のhtmlファイルをそのままブラウザーで表示してデザインを確認することが出来る。
(ブラウザーが解釈できない属性は単純に無視される為)
このため、テンプレートファイルの拡張子はhtmlである。
テンプレートファイルはsrc/main/resources/templates/の下に置く。
(テンプレートでない固定ファイル(cssやimage等)はsrc/main/resources/static/の下に置く)
ControllerのHTTPリクエスト処理メソッドで「hoge/zzz」を返すと、「src/main/resources/templates/hoge/zzz.html」を指すことになる。
Thymeleafでは「th:」で始まる属性を主に使用する。
例えば「<a href="index.html" th:href="@{/index}">hoge</a>」というタグがある場合、ブラウザーでそのまま表示するとth:href属性は無視される。
テンプレートエンジンで処理すると、th:hrefで書いたものがhrefに上書きされる。(元のhrefは消える)
こういう処理が行われる(テンプレートのHTMLをXMLとして読み込む)為、テンプレートファイルの内容は正しいXMLである必要がある。
独自タグも「th:block」というものだけ存在する。
Thymelaef独自のタグや属性のことをダイアレクト(Dialect)と呼ぶ。
Spring BootでThymeleafを扱うにはThymeleafのライブラリーを使用する。
また、セキュリティー(認証)用の「sec:」系タグを使う場合はそのライブラリーも追加する。
〜
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-rest') // REST
compile('org.springframework.boot:spring-boot-starter-security') // 認証
compile('org.springframework.boot:spring-boot-starter-thymeleaf') // Thymeleaf
compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity4') // secタグを使う場合
runtime('org.springframework.boot:spring-boot-devtools')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.security:spring-security-test')
}
Thymeleafを使用するhtmlファイルのヘッダーは以下のようになる。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Thymeleaf example</title> </head> <body> 〜 </body> </html>
secも加えると以下のようになる。
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
Thymeleafの属性(接頭辞「th:」の属性)は、ほとんど通常のHTMLタグの属性と同じものが用意されている。[2017-10-21]
タグ内に通常のHTMLとThymeleafの同等の属性の両方(例えば「href」と「th:href」)が記述されている場合、テンプレート処理が行われると、通常のHTMLの属性は消され、Thymeleafの属性で上書きされる。
(テンプレートファイルを直接ブラウザーで表示した場合、接頭辞「th:」の属性は無視されるので、通常の属性が使われる)
その他に、Thymeleaf独自の動作をする属性もある。
| 属性 | 説明 | 更新日 |
|---|---|---|
th:if |
条件に応じてタグを出力したり削除したりする。 | 2017-10-21 |
th:remove |
タグを削除する。 | 2017-10-21 |
th:each |
タグを繰り返し出力する。 | 2017-10-21 |