3. VTL・#set,#ifなど
2005.12.07 株式会社四次元データ 里見玲爾
Velocity 3章 VTL・#set,#ifなど
- 3.1. #set
- 3.2. #if #elseif #else
指示子とは"#"で始まるVTL文の種類を表すもので、Velocityエンジンに対する命令の種類とも言えます。
3章、4章、5章では、指示子について解説します。
まずこの3章では#set、#if、#elseif、#else指示子について解説します。
3.1. #set
#setは右辺の値を左辺に代入する指示子です。以下のように表記します。
#set( $value = "$value * 3") #set( $name = "Yojigen") #set( $name = 'Yojigen')
ダブルコーテーションを使っている場合は解析され、シングルコーテーションを使っている場合は解析されません。 以下に例を示します。
#set($name = "YojigenTaro") #set($a = "$name") #set($b = '$name') $a $b
こう記述すると、処理結果は以下のようになります。
YojigenTaro $name
3.2. #if #elseif #else
#if、#elseif、#elseは条件分岐するための指示子です。それぞれ以下のように記述します。
#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 です。 やせ気味です。
次の章では、#foreach指示子について解説します。