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

Thymeleaf 式

Thymeleafの式について。


概要

th:text等のThymeleafの属性にはThymeleafの式を書く。

式なので、数値の四則演算や文字列の結合等を記述する事が出来る。


変数式(${変数名})

${変数名}」で変数の値を取得できる。

これは、ControllerのModelにセットした値の取得となる。

src/main/java/com/example/demo/web/VariableController.java:

package com.example.demo.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class VariableController {

	@RequestMapping(path = "example/variable")
	public String init(Model model) {
		model.addAttribute("hoge", "zzz");
		return "variable";
	}
}

src/main/resources/templates/variable.html

〜
	<h1>変数式</h1>
	<p th:text="${hoge}">変数式の実験</p>
〜

↓生成されるHTML

〜
	<h1>変数式</h1>
	<p>zzz</p>
〜

Modelにクラス(JavaBeans等)のインスタンスをセットし、そのフィールド(プロパティー)の値を取得することも出来る。
${変数名.プロパティー名}」の様に記述する。

src/main/java/com/example/demo/web/VariableForm.java:

public class VariableForm {

	private String message;

	〜setter/getter〜
}

src/main/java/com/example/demo/web/VariableController.java:

		VariableForm form = new VariableForm();
		form.setMessage("foo");
		model.addAttribute("variableForm", form);

src/main/resources/templates/variable.html:

	<p th:text="${variableForm.message}">変数式の実験</p>

↓生成されるHTML

	<p>foo</p>

例えば変数の内容がListで要素数を取得したい場合、Listにはsizeメソッドがあるので、「${変数名.size()}」で取得できる。

また、ListやMap等に関しては組み込みのユーティリティーオブジェクトがあるので、「#lists.size(変数名)」で取得することも出来る。

どちらの場合も、変数の値がnullの場合は例外が発生する。


選択変数式(*{プロパティー名})

${変数名.プロパティー名}」に対し、th:object属性で変数名を指定(選択)しておくと、 「*{プロパティー名}」でその変数のプロパティーの値を取得できる。

src/main/resources/templates/variable.html:

	<h2>選択変数式</h2>
	<p th:object="${variableForm}">
		<span th:text="*{message}">選択変数式の実験</span>
	</p>

↓生成されるHTML

	<p>
		<span>foo</span>
	</p>

リンクURL式(@{パス})

@{パス}」でURLを記述しておくと、実行時のコンテキストに従ったURLが生成される。
主にth:href等のURLを指定する属性で使用する。

src/main/resources/templates/variable.html:

	<h2>リンクURL式</h2>
	<a href="index.html" th:href="@{/index}">URLの実験</a>

↓生成されるHTML

	<h2>リンクURL式</h2>
	<a href="/index">URLの実験</a>

URL(パス)にパラメーターを設定したい場合は以下のようにする。

src/main/java/com/example/demo/web/VariableController.java:

		model.addAttribute("id1", "a1");
		model.addAttribute("id2", "b1");

src/main/resources/templates/variable.html:

	<a href="index.html" th:href="@{/index/{id1}(id1=${id1})}">URLの実験1</a>
	<a href="index.html" th:href="@{/index/{id1}?id={id2}(id1=${id1}, id2=${id2})}">URLの実験2</a>
	<a href="index.html" th:href="@{/index(id1=${id1}, id2=${id2})}">URLの実験3</a>

↓生成されるHTML

	<a href="/index/a1">URLの実験1</a>
	<a href="/index/a1?id=b1">URLの実験2</a>
	<a href="/index?id1=a1&id2=b1>URLの実験3</a>

丸括弧で囲んで変数定義すると、それを「{変数}」でパスの一部に指定することが出来る。
変数を定義したがパスで使用しなかった場合、自動的にURLパラメーター(「?」以降の部分)として追加される。


条件に応じてURLを変えたい場合は文字列として記述する。[2017-10-29]

src/main/java/com/example/demo/web/IfController.java:

		model.addAttribute("condition", true);

src/main/resources/templates/if.html:

	<a th:href="@{${condition} ? '/aaa' : '/bbb'}">url1</a>
	<a th:href="@{!${condition} ? '/aaa' : '/bbb'}">url2</a>

↓生成されるHTML

model.addAttribute("condition", true); model.addAttribute("condition", false);
	<a href="/aaa">url1</a>
	<a href="/bbb">url2</a>
	<a href="/bbb">url1</a>
	<a href="/aaa">url2</a>

文字列

th:text等のThymeleafの属性の中では、文字列(テキストリテラル)はシングルクォーテーションで囲む。
シングルクォーテーション自体を出力したい場合は「\」でエスケープする。

文字列の結合は「+」演算子で行う。

src/main/resources/templates/variable.html:

	<h2>文字列</h2>
	<p th:text="'test1\'test2'">文字列の実験</p>
	<p th:text="'test' + ${hoge}">結合の実験</p>

↓生成されるHTML

	<h2>文字列</h2>
	<p>test1'test2</p>
	<p>testzzz</p>

文章中の一部に変数を埋め込みたい場合は、「|」で囲む記法(リテラル置換)を使うことが出来る。

src/main/resources/templates/variable.html:

	<p th:text="|test' ${hoge}|">リテラル置換の実験</p>

↓生成されるHTML

	<p>test' zzz</p>

リテラル置換では、シングルクォーテーションはエスケープする必要は無い。
「|」自身を記述する事は出来ないようだ。(「\」でエスケープすることは出来なかった)


リテラル置換を他の式の演算に使うことも出来る。

	<p th:text="'test' + |(${id1}, ${id2})|">〜</p>

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