Java ベースのテンプレートエンジン Velocity を使ったメモ
少し前の案件で、Velocity (ヴェロシティ) という Java ベースのテンプレートエンジンを使った。そこで、「基本的な使い方」というよりはトラブルシューティング的な知識、逆引きで引っかかったところをまとめておく。
Eclipse で Velocity を扱う時は VeloEdit を入れておくとシンタックスハイライトされる
Eclipse の「ヘルプ」メニューの所からインストールできる。シンタックスハイライトはあんまり細かく設定できないので、気休め程度で。
#if
文の中の Velocity 変数には !
を付けても付けなくても変わらない
#if
文の中では、Velocity 変数は先に存在チェックを行われて真偽値を返すので、$hoge
あるいは ${hoge}
と書いても、値が null の時に無視される $!{hoge}
という書き方をしても、扱いは同じになる。
変数に型が明示されていない感覚は JavaScript に近いかもしれない。
#if(${hoge})
## Velocity 変数 hoge が null の場合は false、null でない場合は true
## 変数が未定義な場合は null と見なされるので false となる
#end
#if($!{hoge} > 50)
## 「!」の有無は動きに関係ない。
## 変数が未定義や null の場合は単純に条件を満たさないので、この式は false 扱いになる
#end
僕は変数は必ず $!{hoge}
の形式で書くように統一していた。
文字列は ==
で比較して良いっぽい
#if($!{hogeStr} == "HOGEFUGA")
## 処理
#end
equals()
を使うのかなと思ったのだけど、ネット上で文献を漁ってもそういうサンプルが見つからず。結局 ==
で比較しても問題なく動作していたのでそうしてしまった。
#include
は静的読み込み、#parse
はテンプレートとして読み込み
別ファイルを読み込む時の方法が2つある。
#inclde
は単にテキストとして挿入するイメージなので、中に Velocity の構文が書いてあっても処理されず、そのままテキストとして展開される。
#parse
はテンプレートとして処理して読み込む。
## 変数をセットしておくと…
#set($hoge = "HOGE")
## Parse する別ファイル内で $hoge が参照できる
#parse("another.vm")
## もし別ファイル内で何か変数を宣言していたら…
#set($another = "ANOTHER")
## Parse を書いた元ファイルから $another が参照できる
<p>$!{another}</p>
jQuery を混ぜ込みたい時は jQuery()
で書くか #include
する
jQuery が使う $
という変数名が Velocity 変数と被るので、Velocity テンプレート内に jQuery を書いたり、#parse
読み込みしたりすると正しく処理されなくなる。
そのため、手間だが jQuery()
で書くようにするか、#include
で静的読み込みできるようにしておくと良いと思う (まぁ最初から .js
ファイルとして外出しすれば良いのだが…)。
Integer.parseInt()
などしたい時は
Integer
を Velocity Template に送らなきゃ…とか思ったけど、コレで行ける。
## 適当な数値型の変数を作り、コレを Integer のライブラリとして使う
#set($MyInteger = 0)
$Integer.parseInt($!{hogeStr})
変数名はそのまんま Integer
にしてしまっても良い。
- 参考 : How to convert string into integer in velocity template? - Stack Overflow
- 参考 : Velocity テンプレートでの文字列から数値への変換 | Office IWATA Inc.