前回はhtmlを書くために、Thymeleafを使ったところだった。今度はJSを使ってみたいので、Application development with Spring Boot + JSをやってみようとした。ところが、これはgroovyでのサンプル?のようで、よくわからなかったので、githubのコードを確認したら、readmeにSpring Boot + webjarsへのリンクがあったので、こっちを確認することに。
Spring BootでJSライブラリを扱う(Webjars)
JS開発者はnpmやbowerを使ってライブラリを管理するが、Javaの開発者はMavenを使って管理できるようにWebjarsを使うといい、と書いてあったと思う。Webjarsを使うと、特別な設定なしに、JSライブラリを扱うことができるようだ。
webjars.orgを使って、JSライブラリをインストールするのが、Java系の標準なんだろうか?
以下を、build.gradleのdependenciesブロックに追加した。
dependencies { // compile("org.springframework.boot:spring-boot-starter-web:1.2.1.RELEASE") // compile("org.springframework.boot:spring-boot-starter-actuator:1.2.1.RELEASE") compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.2.1.RELEASE") compile("org.webjars:jquery:2.1.3") testCompile("org.springframework.boot:spring-boot-starter-test:1.2.1.RELEASE") }
そして、thymeleafで作ったテンプレート側を以下のように修正。
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Getting Started: Serving Web Content</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="webjars/jquery/2.1.3/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $('p').animate({ fontSize: '48px' }, "slow"); }); </script> </head> <body> <p th:text="'Hello, ' + ${name} + '!'" /> </body> </html>
webjars/jqueryの行でJSライブラリを読み込み、その後、ページの読み込みが終わったらフォントが大きくなるアニメーションを追加している。動かしてみたら、うまくいった。
ThymeleafのCacheの削除方法
ホットスワップにしていたので、自動的に削除されると思っていたら、ちゃんと設定しないとテンプレートのキャッシュも削除されないらしい。
静的ファイルは毎度読み込むのだが、テンプレートは静的ファイルではないので、キャッシュされるってことのようだ。
application.propertiesに以下のように書く。
spring.thymeleaf.cache = false
静的ファイルはどこに置くのか?
Serving Static Web Content with Spring Bootを読んだ。
静的ファイル置き場は、プロジェクト直下にpublicディレクトリやstaticディレクトリなどを作ると自動的にSpring Bootが認識してくれるらしい。なので、先ほどの文字を大きくするアニメーションのJSを、外部ファイル化してみた。
$(document).ready(function() { $('p').animate({ fontSize: '48px' }, "slow"); });
そして、htmlで外部ファイル化したJSを読み込むように修正。
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Getting Started: Serving Web Content</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="webjars/jquery/2.1.3/jquery.min.js"></script> <script src="/js/application.js"></script> </head> <body> <p th:text="'Hello, ' + ${name} + '!'" /> </body> </html>
文字が大きくなることが確認できた。