はじめに
こんにちは、新卒2年目の岡崎です。エキサイトHDアドベントカレンダー2024の5日目を担当します。
今までの記事はこちらをご覧ください。
さて。今回は、SpringBoot + Thymeleafで、JavaScriptに変数を埋め込む方法を紹介します。
環境
- Java 試しに23を使っていますが、21でも問題ないです。
openjdk version "23.0.1" 2024-10-15 OpenJDK Runtime Environment Corretto-23.0.1.8.1 (build 23.0.1+8-FR) OpenJDK 64-Bit Server VM Corretto-23.0.1.8.1 (build 23.0.1+8-FR, mixed mode, sharing)
- gradle
------------------------------------------------------------ Gradle 8.11.1 ------------------------------------------------------------ Build time: 2024-11-20 16:56:46 UTC Revision: 481cb05a490e0ef9f8620f7873b83bd8a72e7c39 Kotlin: 2.0.20 Groovy: 3.0.22 Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023 Launcher JVM: 23.0.1 (Amazon.com Inc. 23.0.1+8-FR) Daemon JVM: /Users/hiromi.okazaki/.sdkman/candidates/java/23.0.1-amzn (no JDK specified, using current Java home) OS: Mac OS X 14.7 aarch64
- SpringBoot
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.0)
依存関係
build.gradleに以下の設定がない場合は、追加してください。
dependencies { // SpringBootの設定 implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' // SpringBootでThymeleafを使うための設定 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' }
実装
今回の目標は、Controllerで設定した変数を、コンソールで表示することです。
Controller
まずは、Controllerで変数の設定を行います。
今回はsampleMessage
という変数に、hello world
を値としてセットしました。
実装例は以下です。
@Controller @RequiredArgsConstructor @RequestMapping("sample") public class SampleController { @GetMapping public String getSample( Model model ) { model.addAttribute("sampleMessage", "hello world"); return "page/sample/index"; } }
html
次にhtmlの実装を行います。
resources以下を、今回は以下の構成にしました。
resources | -- templates | -- pages | -- sample | -- index.html
index.htmlの実装は以下の通りです。
<!DOCTYPE html> <html lang="ja" xmlns:th="http://www.thymeleaf.org"> <head> <title></title> <meta charset="UTF-8"> <script th:inline="javascript"> const sampleMessage = /*[[${sampleMessage}]]*/"sampleです"; console.log(sampleMessage); </script> </head> <body> sample pageです </body> </html>
実装の解説です。
今回はThymeleafを使い、Controllerでモデルにセットした値をコンソールに表示します。
JavaScriptで変数を使うため、scriptタグにth:inline="javascript"
を設定します。
<script th:inline="javascript"> // 中略 </script>
scriptタグの中で変数を使う場合、/*[[${ }]]*/
の中に変数をセットします。
今回は変数名をsampleMessageとしているので、/*[[${sampleMessage}]]*/
となります。
sampleMessage
はイミュータブルな値としたかったので、const
を使いました。
const sampleMessage = /*[[${sampleMessage}]]*/;
だけだと、初期値がないと判断されるため、'const' variable without initializer is not allowed
というエラーメッセージが出ます。
したがって、初期値をセットする必要があります。
/*[[${ }]]*/"ここに初期値をセットする"
とすれば、初期値を設定できます。
最後にアプリケーションを起動し、指定したエンドポイントにアクセスします。
ページが表示されました。 ここでコンソールを開いて確認すると、sampleMessageに設定された値が表示されました。
最後に
今回は、SpringBoot + Thymeleafで、JavaScriptに変数を埋め込む方法を紹介しました。 どなたかの参考になれば幸いです。