【Spring Boot】ThymeleafのリンクURL式 html編

今回は変数などによって組み立てられたURLを設定するときに使用するThymeleafの”リンクURL式“について紹介します。

開発環境
・Spring Boot:2.6.2
・Thymeleaf:3.0.14.RELEASE
・Java:1.8

リンクURL式について

まずリンクURL式とは何か、そしてどんなメリットがあるのかを説明します。

リンクURL式は単純式のひとつ

リンクURL式はThymeleafで用意されている“単純式(Simple Expressions)”の一つです。

単純式はhtmlの属性に値やオブジェクトを渡す際に使用する式で、リンクURL式の場合は最初に述べたように「変数などで組み立てたURL」を渡します。

またリンクURL式の他に、下記の単純式が用意されています。

詳細は各記事に記載しています。

使用するThymeleafの独自属性

リンクURL式はThymeleafの独自属性とともに使用します。使用する独自属性の代表例と用途は下記のとおりです。

属性用途
th:actionフォーム送信時の送信先を設定
th:hrefハイパーリンク先を設定

リンクURL式はThymeleafで用意されている独自の属性を使用するため、xmlネームスペース(xmlns)を設定する必要があります。

HTML
<!--/* prefixには"th"がよく使用される */-->
<html xmlns:th="http://www.thymeleaf.org" >

リンクURL式のメリット

リンクURL式は、他の単純式よりも簡潔に動的なURLを記載することができます。

変数式だけで組み立てた場合とリンクURL式を用いて組み立てた場合の比較は以下の通りです。

HTML
<!--/* fugaには文字列、pageにはページ数が格納されている想定 */-->
<!--/* 変数式のみ使用 */-->
<a th:href="'/hoge/' + ${fuga} + '?page=' + ${page}"></a>
<!--/* リンクURL式を使用 */-->
<a th:href="@{'/hoge/' + ${fuga}(page=${page})}"></a>

URLパラメータの記述が簡潔になっていることがわかりますね。

リンクURL式の記載方法

基本

リンクURL式は先頭に“@”をつけて“{}”でURLの情報を囲むことで利用可能です。

HTML
<a th:href="@{/index}"></a>

URLはいろんな書き方があります。下記はよく使うため違いを覚えておきましょう。
http://localhost:8080/index上に記載した場合、アクセス先は下記のようになります。

種類リンクURL式アクセス先
絶対URL@{http://localhost:8080/page}http://localhost:8080/page
相対URL@{/page}http://localhost:8080/page
相対URL@{page}http://localhost:8080/index/page

単純式を使用したURLの組み立て

URLを変数等で動的に作成する場合、リンクURL式と他の単純式を組み合わせます。

○Java

Java
// modelは「org.springframework.ui.Model」
String pagename = "preferences";
model.addAttribute("pagename", pagename);

○メッセージ

Plaintext
# messages.xml
siteurl=https://www.google.co.jp/{0}

○html

HTML
<!--/* 変数式を使用 */-->
<a th:href="@{'https://www.google.co.jp/' + ${pagename}}"></a>
<!--/* メッセージ式を使用。結果は上記と同じ */-->
<a th:href="@{#{siteurl(${pagename})}}"></a>

○出力結果

また単純式で使われる“$”や文字列の結合に用いる“+”が邪魔してURLが見づらいと感じる場合は、リンクURL式の末尾にまとめて記載することもできます。

その場合は末尾に“(変数名=値)”と記載し、値を反映させたい場所に”{変数名}”と記載します。複数使用する場合はカンマ区切りで記載します。

○html

HTML
<a th:href="@{'https://www.google.co.jp/' + ${pagename}}"></a>
<!--/* 末尾に単純式を記載。結果は上記と同じ */-->
<a th:href="@{https://www.google.co.jp/{pagename} (pagename=${pagename})}"></a>

○出力結果

URLパラメータの付与

URLパラメータをつけたい場合は、“(パラメータ名=パラメータ値)”と記載します。

○Java

Java
// modelは「org.springframework.ui.Model」
model.addAttribute("paramName", "q");
model.addAttribute("paramValue", "thymeleaf");

○html

HTML
<!--/* 変数式を使用 */-->
<a th:href="@{https://www.google.co.jp/search(q=${paramValue})}"></a>
<!--/* パラメータ名も単純式で記載可能 */-->
<a th:href="@{https://www.google.co.jp/search(${paramName}=${paramValue})}"></a>

○出力結果

リンクURL式の中に“{パラメータ名}”のような記述があるとURLパラメータとして認識されないため注意しましょう。

○html

HTML
<!--/* URLパラメータとして認識 */-->
<a th:href="@{/index(user=taro,page=1)}"></a>
<!--/* 置換用の変数として認識 */-->
<a th:href="@{/index/{user}(user=taro,page=1)}"></a>

○出力結果

まとめ

  • リンクURL式は「変数などで組み立てたURL」を渡す単純式で、動的なURLを簡潔に記載したい時に使用する。
  • @{…}の形で…にURLを記載する。
  • リンクURL式の中で他の単純式を使うことができる。
  • 単純式は@{…(変数名=値)}と記載することにより、末尾にまとめて記載可能。変数を複数使用する場合はカンマ区切りで記載する。
  • @{…(パラメータ名=パラメータ値)}と記載することでURLパラメータを付与できる。パラメータを複数付与する場合はカンマ区切りで記載する。

アクセス先のURLを組み立てる際にとても便利な式なので、ぜひリンクURL式をマスターしましょう!

コメント

タイトルとURLをコピーしました