Thymeleafテンプレートエンジンを使う (4/4)
作成:2015-04-25 10:30
更新:2015-04-25 10:30
更新:2015-04-25 10:30
■複雑な値をオブジェクトで渡す
単純なテキストや数字といった値なら、簡単にコントローラーからビューへと渡すことができました。では、より複雑な値はどうすればよいでしょうか。
もちろん、1つ1つの値をaddAttributeで追加していってもいいのですが、あまり効率的とはいえません。こうした場合は、必要な情報をひとまとめにして扱うクラスを定義し、そのインスタンスを使って渡すのがJavaらしいやり方でしょう。
では、実際にやってみましょう。下のリスト欄に、「Data」クラスを用意して、そのインスタンスをビュー側に渡す簡単な処理を用意しました。Dataクラスでは、name, mail, telといったフィールドを用意し、そのGetter/Setterメソッドを用意してあります。コントローラー側では、このインスタンスを作成し、addAttribute("data",data);でModelに組み込んでいます。
これを表示するために、ビュー側にこんな感じでタグを用意しておきましょう。
見ればわかるように、${data.name}というようにしてdata変数内のnameやmail、telの値を取り出しています。非常に単純ですね。
ここで注意しておかないといけないのは、「Thymeleafでは、Getterメソッドで値を得る」という点です。${data.name}は、dataインスタンス内の「getName」メソッドを呼び出して値を取得しています。
フィールドをpublicにしてgetNameを削除すると、この${data.name}は値を取り出せなくなります。フィールドがpublicであるかどうかに関係なく、必ずGetterメソッドを用意しておきましょう。
もちろん、1つ1つの値をaddAttributeで追加していってもいいのですが、あまり効率的とはいえません。こうした場合は、必要な情報をひとまとめにして扱うクラスを定義し、そのインスタンスを使って渡すのがJavaらしいやり方でしょう。
では、実際にやってみましょう。下のリスト欄に、「Data」クラスを用意して、そのインスタンスをビュー側に渡す簡単な処理を用意しました。Dataクラスでは、name, mail, telといったフィールドを用意し、そのGetter/Setterメソッドを用意してあります。コントローラー側では、このインスタンスを作成し、addAttribute("data",data);でModelに組み込んでいます。
これを表示するために、ビュー側にこんな感じでタグを用意しておきましょう。
<ol>
<li th:text="${data.name}" />
<li th:text="${data.mail}" />
<li th:text="${data.tel}" />
</ol>
見ればわかるように、${data.name}というようにしてdata変数内のnameやmail、telの値を取り出しています。非常に単純ですね。
ここで注意しておかないといけないのは、「Thymeleafでは、Getterメソッドで値を得る」という点です。${data.name}は、dataインスタンス内の「getName」メソッドを呼び出して値を取得しています。
フィールドをpublicにしてgetNameを削除すると、この${data.name}は値を取り出せなくなります。フィールドがpublicであるかどうかに関係なく、必ずGetterメソッドを用意しておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package com.tuyano.libro.bootapp;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SampleController {
@RequestMapping("/helo")
public Model helo(Model model) {
Data data = new Data("Taro","taro@yamada","090-999-999");
model.addAttribute("data",data);
model.addAttribute("msg","これはThymeleafを使ったサンプルです。");
return model;
}
}
class Data {
private String name;
private String mail;
private String tel;
public Data(String name, String mail, String tel){
this.name = name;
this.mail = mail;
this.tel = tel;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getMail() { return mail; }
public void setMail(String mail) {
this.mail = mail;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
※関連コンテンツ
「初心者のためのSpring Bootプログラミング入門」に戻る