目次へ

6. Velocimacro

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

この章では、Velocimacroについて解説します。

6.1. Velocimacroとは

Velocimacro(VMとも呼ばれる)とはVelocityで定義できるマクロのことで、 マクロとは特定の操作手順をプログラムとして記述して自動化することです。 よく使う処理をマクロとして保存しておけば、 マクロを呼び出すことで簡単にその処理を行えるようになります。

テンプレートで使用できるVelocimacroには、 設定ファイルのほうから読み込んだVelocimacroと、 テンプレートのvmファイル内(インラインと呼ぶ)で定義されたVelocimacroの2種類があります。 設定にもよりますが、設定ファイルのほうから読み込んだVelocimacroはすべてのテンプレートファイルで使用可能ですが、 インラインで定義されたVelocimacroはその定義されたテンプレートファイル内でしか認識されないため、 他のテンプレートファイルでは使用できません。

設定ファイルから参照する場合には、 設定ファイル内のvelocimacro.libraryの部分にVelocimacroを定義したvmファイルのパスを指定します。 通常このときのvmファイルは、マクロの定義のみのファイル(テンプレートライブラリ、Velocimacroライブラリなどとも呼ばれる)とします。 一方、インラインでVelocimacroを定義する場合には、使用するvmファイル内でVelocimacroを定義するだけです。

次の節ではvmファイルでVelocimacroを定義する方法を解説します。

6.2. Velocimacroの定義

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

  #macro( vmname $arg1, $arg2, ..) [ VTLコード.. ] #end

vmnameはVelocimacroを利用する際の名前で、$arg1、$arg2,..の部分は引数を表しています。 引数は複数指定可能ですが、実際呼び出す際の引数と一致する必要があります。 [ VTLコード.. ]にはVelocimacroとして認識させる処理(VTLやテキストなど)を記述します。 またVelocimacroの定義の()の中には、#で始まるVTL指示子は使えません。
このVelocimacroを呼び出すときには次のように記述します。

  #vmname($arg1, $arg2, ..)

では実際にVelocimacroを定義してみましょう。

 例
  #macro(easyMacro $group)
      #foreach($human in $group)
        velocityCount  :  $human.name
        
      #end
   #end

この例では4章の#foreachであげた例のように、 groupに格納されている人(Human)オブジェクトの名前(name)を列挙するようなVelocimacroを、 easyMacroとして定義しています。 このeasyMacroを呼び出すには以下のように記述します。

 #easyMacro($groupA)

6.3. Velocimacroの設定

設定ファイルの設定によって、Velocimacroの扱いを変更することができます。主に設定できる内容は以下のようなものです。

設定解説デフォルト値
velocimacro.library Velocityエンジンの初期化のときに読み込むテンプレートライブラリのパスを指定します。 VM_global_library.vm
velocimacro.permissions.allow.inline テンプレートの中で#macro指定子によりVelocimacroを定義可能かどうかを指定します。true
velocimacro.permissions.allow.inline.to.replace.global Velocityエンジンの初期化の際に読み込んだテンプレートライブラリで定義されたVelocimacroを、 インラインで定義されたVelocimacroで上書きできるかを指定します。 false
velocimacro.permission.allow.inline.local.scope インラインで定義されたVelocimacroが、定義されたテンプレートでのみ有効かどうかを指定します。 trueのとき、Velocimacroは定義されたテンプレートでのみ有効です。false
velocimacro.context.localscope Velocimacro内でVelocityContextの値に変更を与える場合(#set指定子などによる)、 その変更をVelocimacro内のみの一時的な変更とするか、永続的な変更とするかどうかを指定します。 false

設定ファイルで設定できる他の内容については、10章「Velocityの設定キー」で詳しく解説します。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp