S-JIS[2017-10-14/2017-10-29] 変更履歴

Spring Boot Thymeleaf

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:」系タグを使う場合はそのライブラリーも追加する。

build.gradle:

〜
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

Spring Bootへ戻る / Spring Frameworkへ戻る / 技術メモへ戻る
メールの送信先:ひしだま