14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

thymeleafを触ってみる(備忘録として)

Last updated at Posted at 2015-07-13

thymeleaf備忘録

#概要
thymeleafはjavaのテンプレートエンジンで、最近流行っているらしい。
なんでも、静的にも動的にもページが描画できて、WEBデザイナーとプログラマの共同作業が可能、つまりMVCの分業ができるらしい(詳細は下記) 。
センスある人にviewは任せて、われわれプログラマはゴリゴリとロジックかけて、適材適所みたい。

デザインが完成し、htmlファイルが来ると、タグの埋め込みやらコントローラ間の値の受け渡しは
プログラマの仕事で、thymeleafの勉強が必要となるわけです。
基本的なところにとどまりますが、備忘録として。

#静的にも動的にも描画できる
概要で述べた「静的にも動的にも描画できる」というthymeleafの売り。なんやねんという方へ。
静的にとは値の受け渡しなしでも値が表示できるという意。動的にとはコントローラ側から値を受け取れるという意。例は下記のとおり。th:textは表示しますよ的なやつ。
     

I'am <span th:text="${nature}"> Human </span></p>

例えば、コントローラ側で「nature」に「gentle」がセットされているとき、「I'm gentle」と表示される。(予想通りだわ)
一方、「nature」に何も入っていないときは、エラーにならず「I'm Human」と表示される。
このように、htmlがコントローラに依存しない点が使いやすいようである。

#繰り返し処理
コントローラ側でリストをセットし、そいつを回したいなんてあるあるですね。
こんな感じに使います。リストは性質をフィールドにもつ人間オブジェクト(dtoとする)のリストで
tableに表示していくものとします。

   <tr th:each="nature : ${human}">
      <td th:text="${nature.name}">太郎</td>
      <td th:text="${nature.age}">30</td>
      <td th:text="${nature.sex}">男</td>
   </tr>

<tr>タグでリストを回しています。javaの拡張for文みたいなイメージ。そこで取り出したオブジェクトか
ら、<td>タグで値をとります。「${nature.name}」でnameが取れます(dtoの参照変数名と合わせる)。

#条件分岐

1.条件に沿う場合のみ出力したい場合
条件に合うときのみ、何らかの処理をしたいときは「th:if」を利用する。
例えば、「エラーメッセージがnullでないときにエラーと表示したい」とき。

    <p th:if="${errorMessage != null}">エラー</p>

上記は「errorMessage」がnullでないときは「エラー」を出力します。
対してnullの場合は<p>タグごと消えます。つまり何も出力されません。
「th:if」の反対の意を持つものとして「th:unless」も用意されているみたいですが
読みにくいし、あまり使いたくないですね。

2.条件に沿うときと沿わないときとで出力を変えたい場合
条件にあうときはこっち、沿わんときはこっちを表示したいんじゃって時は、
三項演算子が使えます。これはなんかけっこう使えました。例は以下。

     <p th:text="${---条件式---}? 'A' : 'B'"/>

条件式が真のとき「A」が、偽のとき「B」が出力されます。
このように書けば、「if...then...else...」が実現できるはず。

3.分岐が多数ありそれぞれ出力を変えたい
これがこの時はこれで...のように多数の分岐を要する時は「switch」が使えます。
上記で取り上げた人間オブジェクトを例とします。

     <td th:switch="${nature.age}">
            <p th:case =="24">1990年生まれ</p>
            <p th:case =="23">1991年生まれ</p>
            <p th:case =="22">1992年生まれ</p>
     </td>

このようにjavaと同じように使えます。
これで「if...else if...else if...」を実現出来るはず。
ただし、cssなどデザインを付けるとき、中のタグにまで範囲が
及ぶかどうかは検証できていないのでご注意を。

以上。

14
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?