引き続き、Thymeleafのチュートリアルを続ける。6章の「繰り返し」と7章の「条件の評価」を読む。 やっと欲しかったものが来た感じ。
Tutorial: Using Thymeleaf (ja)
繰り返し処理の基礎
構文自体に驚きはない
<tr th:each="prod : ${prods}"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> </tr>
prodsには当然Listが入っているのだ。IteratorやMapでもよい。
繰り返しステータスの保持
Rubyのeach_with_indexのようなことをしたかったら、`th:each="prod, iterStat : ${prods}"のようにするとindexやらcountやらを属性に持ったオブジェクトがiterStatに入る。こいつを書かなかったら、デフォルトではprodStatのように変数の後ろにStatって付いたものが勝手に作られる。
データの遅延取得による最適化
LazyContextVariableを継承していると、必要があるときまでデータが展開されない。
単純な条件:“if”と“unless”
th:if
が偽ならそれが付けられたエレメントは展開した結果から抜かれる。ここでTruelyなものは
- null
- 0
- false
- “false” | “off” |“no”
じゃないものである
スイッチ文
Switchもある。構文に特に違和感はない
<div th:switch="${user.role}"> <p th:case="'admin'">User is an administrator</p> <p th:case="#{roles.manager}">User is a manager</p> <p th:case="*">User is some other thing</p> </div>