Think Twice
IT技術メモ | Velocityのメモ
Created: 2022-10-07 / Updated: 2022-10-26

Velocityの文法


ここではVelocityの文法を簡単にまとめておきます。

目次


拡張子

コメント

1行コメント

複数行コメント

変数

変数の出力

代入

#set

#setは右辺の値を左辺に代入する指示子です。

Copy
#set( $value = "$value * 3")
#set( $name = "Yojigen")
#set( $name = 'Yojigen')

Copy
#set($name = "ふも")
#set($a = "$name")
#set($b = '$name')
$a
$b
処理結果
Copy
ふも
$name

制御フロー

#if、#elseif、#else

#if#elseif#else#endは条件分岐するための指示子です。

Copy
#if( <条件> )
[ <出力> ]

[ #elseif( <条件2> ) [ <出力2> ] ]
・・
[ #else [ <出力3> ] ]
#end

#if#else#elseifを使った例として、人(Human)クラスのオブジェクトのBMI指数(肥満度指数)を測定する例を考えてみます。 Humanクラスはプロパティとして身長(height:単位はメートル)と体重(weight:単位はキログラム)のみを持っているとします。
まず、vmファイルを以下に示します。

bmi.vm
Copy
#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
Copy
(略)
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);
(略)
出力結果
Copy
  あなたのBMI指数は 17.93 です。
  やせ気味です。

インポート

#parse, #include

Copy
#parse( <ファイル名または変数名> )
または
#{parse}( <ファイル名または変数名> )
  
#include( <ファイル名または変数名> )
または
#{include}( <ファイル名または変数名> ) 
sample1.vm
Copy
#set($num = 10)
#parse("sample2.vm")
sample1.vmの処理が終了

再帰的なパース

参考サイト


マクロ(Velocimacro)

Velocimacroとは

VelocimacroとはVelocityで定義できるマクロのことです。たぶん読み方は「べろしまくろ」。1
関数のようなものです。
#xxxxxxの部分の名前を自由に定義できます。

Velocimacroの定義

Velocimacroを定義するには、vmファイル内に#macro指示子を使って次のような形で記述します。

Copy
#macro( <マクロ名> $arg1, $arg2, ..) [ VTLコード.. ] #end

Velocimacroの読み込み

Velocimacroとして読み込むファイルのパスをvelocity.propertiesに指定します。

例:velocity.properties
Copy
velocimacro.library = /macro/webparts.vm, /macro/test.vm

使用例

マクロ(helloWorld)の定義
Copy
#macro(helloWorld $name, $age)
  こんにちは!私の名前は<b>$name</b>、<b>$age</b>歳です。仲良くしてね。
#end
helloWorldの使用例
Copy
#helloWorld("さとう", 100)
出力結果
Copy
こんにちは!私の名前は<b>さとう</b>、<b>100</b>歳です。

参考サイト


参考

参考サイト


  1. インパクトのある名前である。 ↩︎