プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Spring Framework
  • 【Spring Boot】「Thymeleaf(タイムリーフ)」でビューを作ろう。(Hel…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Spring Boot】「Thymeleaf(タイムリーフ)」でビューを作ろう。(Hello World)

05.19

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

Spring Bootでは、「Thymeleaf(タイムリーフ)」というテンプレートエンジンでビューを作るのが推奨されています。

JSPで作らないのか?

JavaでのWeb開発になれている方であれば、誰しもビューといえば、「JSP」というイメージがある方が多いと思います。

しかし、Spring Boot(特に、1.2以降)は、JSPの利用を推奨しておらず、「Thymeleaf」等のテンプレートエンジンを使うことが推奨されています。

「Thymeleaf(タイムリーフ)」でビューを作る。

それでは、実際に、「Thymeleaf」でビューを作っていきましょう。

「Thymeleaf(タイムリーフ)」のインストール

まずは、pom.xmlに対して、下記の記述を追加します。

1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

これが、「Thymeleaf」の「dependency」にあたります。

「Thymeleaf」でテンプレートファイルを作る。

それでは、ビューの元となるテンプレートファイルを作りましょう。

SpringController.java(コントローラ)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.demo;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class SpringController {
 
    @RequestMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("helloworld", "Hello World");
        return "hello";
    }
}

引数のModel

Modelは、コントローラと、ビューの間で値を共有するためのクラスです。

役割としては、JSP/Servletで言えば、セッションと同じですね。

下記のようにモデルに値を設定することで、ビューでその変数を使うことができるようになります。

1
モデルのインスタンス.addAttribute("変数名", "値");

また、メソッドの戻り値でStringの文字列を返していますが、この文字列を「main/resources/templates/(文字列).html」という形で検索します。

hello.html(テンプレート)

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello World!</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="${helloworld}" />
</body>
</html>

これがテンプレートファイルになります。JSPではなく、HTMLファイルになりましたね。

「main/resources/templates」の下に配置します。

th:text

これは、「Thymeleaf(タイムリーフ)」用の属性です。

pタグに以下のように記述することで、下記の変換が行われます。

1
<p th:text="${helloworld}" />

↓↓↓

1
<p>コントローラから受ける変数</p>

実行結果

ModelAndViewでソースを書き直す。

先ほどのサンプルでは、Modelを使って、コントローラとビューで値を共有しました。

今度は、ModelAndViewというクラスを使っても同じように実装できるのでご紹介します。

HTMLテンプレート部分は同じで、コントローラだけ下記のように書き換えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.example.demo;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class SpringController {
 
    @RequestMapping("/hello")
    public ModelAndView hello(ModelAndView mav) {
     mav.setViewName("hello");
     mav.addObject("helloworld", "Hello World!(ModelAndViewより)");
        return mav;
    }
}

setViewNameメソッド

ここに入れた値が、「main/resources/templates/(文字列).html」で探しに行く文字列に該当します。

addObjectメソッド

これで、コントローラとビューで共有する変数を設定します。

Modelと同じように書くのであっても、ModelAndViewで書いたほうが、メソッドの構造としてはスッキリしますよね。

実行結果

スポンサーリンク
  • 2018 05.19
  • miyabisan2
  • コメントを書く
  • Spring Framework
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 05.20

    【Spring MVC】サンプルアプリを作成しよう。(HelloWorld)

  2. 2018 05.13

    【Spring Framework】AOP(アスペクト指向プログラミング)を「AspectJ」で実装してみる。

  3. 2018 05.19

    【Spring Boot】「Thymeleaf(タイムリーフ)」で画面にまとまった値を渡そう。

  4. 2018 05.06

    【Spring Framework】10年以上に渡る歴史や、関連プロジェクトについて。

  5. 2018 05.13

    【Spring Framework】AOP(アスペクト指向プログラミング)を実装してみる。(設定クラスから実装)

  6. 2018 05.19

    【Spring Boot】SpringBootの基本、javax.servlet.ServletException: Circular view path [~]: would dispatch back to the current handler URL [/~] again. が出て困った話。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Spring Boot】STSでSpring Boo…

【Spring Boot】SpringBootの基本、…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • WebRTC
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー