目次へ

3. VTL・#set,#ifなど

2005.12.07 株式会社四次元データ 里見玲爾

指示子とは"#"で始まる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指示子について解説します。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp