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プログラミング入門」に戻る