libro
www.tuyano.com
初心者のためのSpring Bootプログラミング入門

Thymeleafテンプレートエンジンを使う (4/4)

作成: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に組み込んでいます。

これを表示するために、ビュー側にこんな感じでタグを用意しておきましょう。
<ol>
    <li th:text="${data.name}" />
    <li th:text="${data.mail}" />
    <li th:text="${data.tel}" />
</ol>

見ればわかるように、${data.name}というようにしてdata変数内のnamemailtelの値を取り出しています。非常に単純ですね。

ここで注意しておかないといけないのは、「Thymeleafでは、Getterメソッドで値を得る」という点です。${data.name}は、dataインスタンス内の「getName」メソッドを呼び出して値を取得しています。

フィールドをpublicにしてgetNameを削除すると、この${data.name}は値を取り出せなくなります。フィールドがpublicであるかどうかに関係なく、必ずGetterメソッドを用意しておきましょう。

※プログラムリストが表示されない場合

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