カテゴリ: Thymeleaf 更新日: 2025/12/18

ThymeleafでJavaScriptのonclickイベントに変数を渡す方法を初心者向けに徹底解説!

Thymeleaf JavaScript onclickイベントに変数を渡す方法
Thymeleaf JavaScript onclickイベントに変数を渡す方法

新人と先輩の会話形式で理解しよう

新人

「先輩、Thymeleafを使ってHTMLのボタンをクリックしたときに、変数をJavaScriptに渡す方法ってありますか?」

先輩

「いい質問だね!JavaScriptのonclickイベントで、Thymeleafの変数をJavaScriptに渡す方法があるんだ。」

新人

「それは便利そうですね!どうやって書いたらいいんですか?」

先輩

「まずはonclickイベントの基本と、Thymeleafでの変数の扱い方を理解しよう!」

1. onclickイベントの基本的な仕組み

1. onclickイベントの基本的な仕組み
1. onclickイベントの基本的な仕組み

まず、JavaScriptのonclickイベントの基本をおさらいしましょう。HTMLのボタンやリンクなどにonclick属性を追加することで、クリックされたときにJavaScriptの関数を実行できます。

例えば、シンプルなボタンの例です。


<button onclick="alert('こんにちは!')">クリックして挨拶</button>

このボタンをクリックすると、ブラウザのダイアログが「こんにちは!」と表示されます。onclickの中には、関数の呼び出しや処理を書くことができます。

しかし、実際の開発では、サーバーから受け取った値をJavaScriptに渡して、onclickイベントで使いたいことが多いですよね。そこで登場するのがThymeleafの変数です。

2. ThymeleafでのJavaScript変数の扱い方

2. ThymeleafでのJavaScript変数の扱い方
2. ThymeleafでのJavaScript変数の扱い方

Thymeleafは、Spring Bootの@Controllerクラスから渡したデータをHTMLテンプレートに埋め込む仕組みです。たとえば、コントローラからModelに渡した変数を、th:text[[${}]]でHTMLに反映させます。

変数の埋め込みには、主に次の2つの方法があります。

  • テキストとして表示する方法: th:text属性や[[${}]]式を使います。
  • JavaScript内で使う方法: th:inline="javascript"を使うと、サーバーの値をJavaScript変数として渡せます。

サンプル:コントローラから渡した変数をHTMLで表示

下の例は、@Controllerクラスで「ユーザー名」を渡している場合です。


@Controller
public class SampleController {
    @GetMapping("/sample")
    public String sample(Model model) {
        model.addAttribute("userName", "たろう");
        return "sample";
    }
}

この「userName」をThymeleafテンプレートで表示するときは、次のように書きます。


<p th:text="${userName}">ここにユーザー名が入ります</p>

これで、ブラウザ上には「たろう」という名前が表示されます。

JavaScript内で使う場合のポイント

もしこのuserNameをJavaScript変数として使いたいなら、th:inline="javascript"を使います。


<script th:inline="javascript">
    var user = [[${userName}]];
    console.log(user);
</script>

これにより、JavaScriptの変数userに、サーバーから受け取った「たろう」が入る仕組みです。

このように、Thymeleafの変数は、HTMLのテキスト表示だけでなくJavaScriptの処理にも使えるのが便利です。

3. onclickイベントでThymeleaf変数を受け取る方法

3. onclickイベントでThymeleaf変数を受け取る方法
3. onclickイベントでThymeleaf変数を受け取る方法

ここでは、Thymeleafの変数をonclickイベントに渡す方法を具体的に見ていきます。サーバー側(Controller)から渡された値を、JavaScriptの関数に引数として渡すことで、柔軟に処理できます。

まずは、Controllerから渡された「ユーザーID」をonclickで渡す例です。


@Controller
public class SampleController {
    @GetMapping("/users")
    public String users(Model model) {
        model.addAttribute("userId", 123);
        return "users";
    }
}

この「userId」をHTML側のボタンに組み込んで、JavaScriptの関数に渡す方法がこちらです。


<button onclick="showUser([[${userId}]])">ユーザー情報を見る</button>
<script th:inline="javascript">
    function showUser(id) {
        console.log("選ばれたユーザーID:", id);
    }
</script>

このように、Thymeleafの変数を[[${}]]の中に埋め込めば、onclickでJavaScript関数に値を渡すことができます

4. 実際のコード例と動作確認

4. 実際のコード例と動作確認
4. 実際のコード例と動作確認

次に、複数のユーザーを一覧表示し、それぞれにonclickイベントでIDを渡すサンプルを確認します。まずはControllerでリストを用意します。


@Controller
public class UserController {
    @GetMapping("/userList")
    public String userList(Model model) {
        List<Integer> ids = List.of(101, 102, 103);
        model.addAttribute("ids", ids);
        return "userList";
    }
}

HTMLテンプレート側では、th:eachでリストをループし、各ユーザーにIDを渡すボタンを表示します。


<ul>
  <li th:each="id : ${ids}">
    <button onclick="showUser([[${id}]])">ユーザーID:[[${id}]] を表示</button>
  </li>
</ul>
<script th:inline="javascript">
  function showUser(id) {
    alert("ユーザーIDは " + id + " です");
  }
</script>

このサンプルをPleiades/Gradle環境で実行すると、ブラウザ上に3つのボタンが表示され、それぞれに異なるIDが渡されます。クリックすると、ダイアログでIDが確認でき、onclick変数渡しの動作がわかりやすく確認できます

5. よくあるエラーや注意点

5. よくあるエラーや注意点
5. よくあるエラーや注意点

初心者の方がつまずきやすいポイントと注意点をまとめました。

IDが渡らない・undefinedになる

原因としてth:inline="javascript"が指定されていないケースが多いです。onclickでサーバー値を渡すなら、<script th:inline="javascript">を忘れずに書きましょう。

文字列型の値を渡すとき

数値でなく文字列を渡す場合は、'[[${value}]]'のようにシングルクォートで囲みましょう。そうしないとJavaScriptでエラーになります。


<button onclick="showName('[[${userName}]]')">名前を見る</button>
<script th:inline="javascript">
  function showName(name) {
    console.log("ユーザー名:", name);
  }
</script>

HTMLエスケープに注意

文字列に<’や“などの記号が含まれる場合、表示が崩れたりエラーが起きることがあります。必要に応じてth:utextやエスケープ関数を使いましょう。

セキュリティに配慮する

onclickに直接値を埋め込む方法は簡単ですが、XSS(クロスサイトスクリプティング)対策を意識してください。信頼できるデータのみ渡すことと、必要に応じてサニタイズ処理を行うことが大切です。

動く環境を確認しよう

Pleiades+Gradle環境で、ブラウザの開発者ツール(F12)を開き、実際に生成されたHTMLコードのonclick属性を確認しておくと、値が正しく埋め込まれているかすぐわかります。

6. コメントや可読性を保つコツ

6. コメントや可読性を保つコツ
6. コメントや可読性を保つコツ

onclickイベントに変数を渡すコードでは、コメントを丁寧に書くと後から見ても分かりやすくなります。例えば、どの変数がどこから来たのかや、関数の目的などをコメントで説明しておくと、可読性が上がります。


<script th:inline="javascript">
  // サーバーから渡されたユーザーIDを受け取る関数
  function showUser(id) {
    // idをアラートで表示
    alert("ユーザーIDは " + id + " です");
  }
</script>

また、クリックイベントに直接長い処理を書くと読みにくくなります。関数化して分けることで、見た目もすっきりし、再利用もしやすくなります。

変数名は分かりやすく

変数名はidだけでなくuserIdなど、意味が伝わる名前を使いましょう。こうすることで、コメントなしでもコードの意図が理解しやすくなります。

7. チーム開発でのonclickイベント活用例

7. チーム開発でのonclickイベント活用例
7. チーム開発でのonclickイベント活用例

チーム開発では、onclickに変数を渡す方法がとても役立ちます。たとえば、一覧画面で編集ボタンを押すと、その行のIDを渡してモーダルを開く、といった実装が便利です。


<ul>
  <li th:each="user : ${users}">
    <button onclick="openEditModal([[${user.id}]])">編集</button>
  </li>
</ul>

<script th:inline="javascript">
  function openEditModal(userId) {
    // 編集用モーダルを開く処理
    console.log("編集対象ユーザーID:", userId);
    // ここにモーダルを表示する処理を書く
  }
</script>

このように、onclickイベントで変数を渡して関数に処理を任せると、HTMLがすっきりして保守性が高まります。

また、コメントをテンプレートの上に入れておけば、他のメンバーがコードを見たときに処理内容をすぐ理解できるようになります。

8. 初心者向けのまとめと次のステップ

8. 初心者向けのまとめと次のステップ
8. 初心者向けのまとめと次のステップ

今回は、Thymeleafを使ってJavaScriptのonclickイベントに変数を渡す方法を学びました。重要なポイントを振り返りましょう。

  • ControllerでModelに入れた変数をth:inline="javascript"[[${}]]でJavaScriptへ渡す
  • onclick属性で関数を呼び出し、変数を引数として渡す
  • 文字列と数値ではシングルクォートの扱いに注意
  • コメントと意味のわかりやすい変数名で可読性を向上
  • 関数化してonclick属性を簡潔にし、保守性を高める

次のステップとしては、以下を意識して進めてみましょう。

  1. 複数の変数を渡すパターンを実装する(例:ユーザーID+名前)
  2. サニタイズ処理を取り入れてセキュリティを強化する
  3. JavaScript側でさらに処理(API呼び出しや条件分岐)を追加する

Pleiades+Gradle環境でしっかり動作確認しながら、クリックイベント処理を自分のプロジェクトに取り入れていきましょう。ThymeleafとJavaScriptを組み合わせることで、初心者でもインタラクティブで実用的なUIが作れるようになります

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

ThymeleafでJavaScriptのonclickイベントに変数を渡すにはどうすればいいですか?

ThymeleafでJavaScriptのonclickイベントに変数を渡すには、th:inline="javascript"を指定したscriptタグ内で[[${変数}]]を使い、onclick属性内に埋め込むことで、サーバーの値をJavaScript関数に引数として渡せます。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Springの基本
Spring Bootの@ConfigurationPropertiesScanとは?設定クラス自動検出の仕組みを解説
New2
SpringのAPI開発(REST & GraphQL)
Spring Boot GraphQLでResolverを理解しよう!初心者でもわかるデータ取得の基本
New3
SpringのAPI開発(REST & GraphQL)
Spring Boot GraphQL入門!Query・Mutation・Subscriptionの基本を初心者向けに解説
New4
SpringのDB操作
JPQLのパラメータバインド(:name / ?1)の使い方を完全解説!初心者でも迷わない基本の考え方
人気記事
No.1
Java&Spring記事人気No1
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.2
Java&Spring記事人気No2
SpringのWeb開発(Spring MVC)
DispatcherServletの仕組みを理解する!初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.4
Java&Spring記事人気No4
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.5
Java&Spring記事人気No5
SpringのWeb開発(Spring MVC)
Spring Bootでの@GetMappingと@PostMappingの基本を完全解説!初心者でも理解できる使い方
No.6
Java&Spring記事人気No6
SpringのWeb開発(Spring MVC)
@Controller と @RestController の違いを完全解説!初心者向けSpring MVC入門
No.7
Java&Spring記事人気No7
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み
No.8
Java&Spring記事人気No8
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方