ここではVelocityの文法を簡単にまとめておきます。
目次
拡張子
.vm
を使います。
コメント
1行コメント
##
以降が1行コメントになります。##この一行はコメントになる。
複数行コメント
#*
で始まり、*#
で終わる範囲がコメントになります。#* コメント 改行してもコメント *#
変数
変数の出力
- 以下4種類あります。
記法 説明 値がないときの処理 1 $変数名
これが一番単純な記法です。 $変数名
という文字列を表示します。2 ${変数名}
この記法が1の正式記法ですが、だいたいは1の方が使われます。 $変数名
という文字列を表示します。3 $!変数名
Silent表記法と呼ばれています。 何も出力されません。 4 $!{変数名} これは2と3を組み合わせた記法です。 何も出力されません。
代入
#set
#set
は右辺の値を左辺に代入する指示子です。
#set( $value = "$value * 3") #set( $name = "Yojigen") #set( $name = 'Yojigen')
- ダブルクォーテーションを使っている場合は評価され、シングルクォーテーションを使っている場合は評価されません。
#set($name = "ふも") #set($a = "$name") #set($b = '$name') $a $b
処理結果
ふも $name
制御フロー
#if、#elseif、#else
#if
、#elseif
、#else
、#end
は条件分岐するための指示子です。
#if( <条件> ) [ <出力> ] [ #elseif( <条件2> ) [ <出力2> ] ] ・・ [ #else [ <出力3> ] ] #end
- 条件部分には、
==
、=
、>
、<
、<=
、>=
、!
などの論理演算子の利用が可能です。 - 戻り値が
boolean型
でない場合はnull
以外はtrue
と解釈されます。 - 出力部分には
VTL
またはテキストを記述します。
例
#if
、#else
、#elseif
を使った例として、人(Human)クラスのオブジェクトのBMI指数(肥満度指数)を測定する例を考えてみます。 Humanクラスはプロパティとして身長(height:単位はメートル)と体重(weight:単位はキログラム)のみを持っているとします。
まず、vmファイルを以下に示します。
bmi.vm
#set($bmi = $human.weight / $human.height / $human.height) あなたのBMI指数は $bmi です。 #if($bmi < 20.0) やせ気味です。 #elseif($bmi >= 20.0 && $bmi < 25.0) 標準です。 #elseif($bmi >= 25.0 && $bmi < 40.0) 肥満です。 #else 手に負えません。 #end
次にBMI.javaでhumanオブジェクトを生成します。
BMI.java
(略) Human human = new Human("1.67", "50"); (略) try { velocityContext vc = new VelocityContext(); StringWriter writer = new StringWriter(); vc.put("human", human); Template template = Velocity.getTemplate("bmi.vm"); template.merge(vc, writer); (略)
出力結果
あなたのBMI指数は 17.93 です。 やせ気味です。
インポート
#parse, #include
#parse
、#include
はテンプレート尾中にローカルファイルをインポートするための指示子です。- 両者の違いは、
#parse
は読み込んだファイルのVTL
を解析します。#include
は読み込んだファイルのVTL
を解析しません。テキストファイルとして利用するのみです。
#parse( <ファイル名または変数名> ) または #{parse}( <ファイル名または変数名> ) #include( <ファイル名または変数名> ) または #{include}( <ファイル名または変数名> )
sample1.vm
#set($num = 10) #parse("sample2.vm") sample1.vmの処理が終了
再帰的なパース
#parse
でインポートしたファイルの中でさらに#parse
によるインポートが可能です。- どれだけ深い階層までインポートできるかは、設定ファイルである
velocity.properties
の中のparse_directive.maxdepth
によって指定します。デフォルトは10
です。
参考サイト
マクロ(Velocimacro)
Velocimacroとは
Velocimacro
とはVelocity
で定義できるマクロのことです。たぶん読み方は「べろしまくろ」。1
関数のようなものです。
#xxx
のxxx
の部分の名前を自由に定義できます。
Velocimacroの定義
Velocimacroを定義するには、vmファイル内に#macro指示子を使って次のような形で記述します。
#macro( <マクロ名> $arg1, $arg2, ..) [ VTLコード.. ] #end
$arg1
,$arg2
の部分は引数です。<マクロ名>
の部分がマクロ名になります。
Velocimacroの読み込み
Velocimacro
として読み込むファイルのパスをvelocity.properties
に指定します。
例:velocity.properties
velocimacro.library = /macro/webparts.vm, /macro/test.vm
- この例では、
/macro
ディレクトリにあるwebparts.vm
というファイルとtest.vm
というファイルをマクロとして読み込みます。
使用例
マクロ(helloWorld)の定義
#macro(helloWorld $name, $age) こんにちは!私の名前は<b>$name</b>、<b>$age</b>歳です。仲良くしてね。 #end
helloWorldの使用例
#helloWorld("さとう", 100)
出力結果
こんにちは!私の名前は<b>さとう</b>、<b>100</b>歳です。
参考サイト
参考
参考サイト
-
インパクトのある名前である。 ↩︎