技術系備忘録

Thymeleaf コントローラーとのやりとり①

SpringBootでThymeleafを使用することが多いので、備忘録としていろいろまとめてみる。
Controller側をController.java、View側をsample.htmlとする。

値を表示する

Modelを使用して、値を個別に設定してみる
Modelの場合は、addAttributeで値をViewに渡します

// Controller.java
public String init(Model model) {
 model.addAttribute("id", 1);
 model.addAttribute("no", "000001");
 model.addAttribute("name", "サンプル");

 return "sample";
}
<!-- sample.html -->
<div th:text="${id}"></div>
<p th:text="${no}"></p>
<span th:text="${name}"></span>

こんな感じで設定することで表示できる!
次はModelを使用して、オブジェクトを設定してみる

// Controller.java
public String init(Model model) {
 SampleForm form = new SampleForm();
 form.setId(1);
 form.setNo("000001");
 form.setName("サンプル");
 model.addAttribute("sampleForm", form);

 return "sample";
}

// SampleForm.java
@Data
public class SampleForm {
 private Integer id;
 private String no;
 private String name;
}
<!-- sample.html -->
<div th:text="${sampleForm.id}"></div>
<p th:text="${sampleForm.no}"></p>
<span th:text="${sampleForm.name}"></span>

sampleFormにあるプロパティ名を指定することでそれぞれの値が表示できる!
「sampleForm.」を毎回書くのが面倒なので・・・

<!-- sample.html -->
<th:block th:object="${sampleForm}">
 <div th:text="*{id}"></div>
 <p th:text="*{no}"></p>
 <span th:text="*{name}"></span>
</th:block>

「th:object」を使えば、「$」ではなく「*」でプロパティを指定するだけで表示できる!

値を結合して表示してみる

<!-- sample.html -->
<th:block th:object="${sampleForm}">
 <div th:text="*{id} + ':' + *{no}"></div>
 <span th:text="|名前:*{name}|"></span>
</th:block>
※表示イメージ
1:000001
名前:サンプル

「|」で囲うことでリテラル置換ができる!文字列を「+」でつなげるよりも簡単

 

次はModelAndViewを使用してみる
ModelAndViewの場合は、addObjectで値をViewに渡します

// Controller.java
public ModelAndView init(ModelAndView mav) {
 mav.addObject("id", 1);
 mav.addObject("no", "000001");
 mav.addObject("name", "サンプル");

 mav.setViewName("sample");
 return mav;
}
<!-- sample.html -->
<div th:text="${id}"></div>
<p th:text="${no}"></p>
<span th:text="${name}"></span>

View側は、Modelの時と同じ設定で値を表示できる!

Controller側は、Modelの方が簡潔で作りやすい印象です
①終了