この記事に書いてあること
Tymeleafを使っていて、Javaアプリ側から引き渡した値を使ってHTML側でURLを生成したいような場合があると思います。
例えば、ファイル名は固定だがドメインなどを条件によって切り替えたい場合などです。
簡単な注意点があったのでメモ。
前提
- Spring MVC 5.x
- Java11
- Thymeleaf.3.0.11
先に結論
Thymeleaf側でURLを組み立てるときにJavaの文字列連結のイメージで「+」を使うと、思った通りに連結されません。
簡単なので以下に例を。Javaのアプリ側からdomainPathという属性で「https://test.domain/path/css/」を引き渡します。
ダメな例(連結に「+」演算子を使用)
var url = '[(${domainPath})] + "style.css"';
上記のようにThymeleafで書くと、HTML上では以下のように出力されました。
var url = 'https://test.domain/path/css/ + "style.css"';
+演算子以降が、URLとは別の文字列として表示されてしまっており、urlという変数にうまく代入されませんでした。
OKな例
var url = '[(${domainPath})]style.css';
上記のようにThymeleafで書くと、HTML上では以下のように出力されました。
var url = 'https://test.domain/path/css/style.css';
+演算子を使わずに記述すると、1つのURL文字列として表現されました。これでJavaScript内でも適切に取り扱うことができるようになりました!
結論だけで終わってしまいました
ThymeleafでURL文字列を組み立てる際には、基本的に+演算子は不要のようです。
Javaで書いているときの感覚で文字列連結に+は不要ということですね。