VTL には、3種類のリファレンスのタイプがあります:
変数とプロパティとメソッドです。
VTL を使っているデザイナーとして、あなたがあなたのテンプレートで正しくそれらを使うことができるように、あなたとあなたのエンジニアはリファレンスの特定の名前に関する合意をしなければなりません。
リファレンスへ/からやって来るものすべては、文字列オブジェクトとみなされます。
$foo(例えば整数オブジェクト)を表すオブジェクトがあるならば、Velocity はオブジェクトを文字列に分解するためにその.toString()メソッドを呼ぶことになります。
変数
変数の短縮形表記法は、「$」文字に続くVTL 識別子から構成されます。
VTL 識別子は、英字から始めなければなりません(a..zまたはA..Z)。
文字の残りは、以下の文字のタイプ限定されます:
- アルファベット (a .. z, A .. Z)
- 数字 (0 .. 9)
- ハイフン ("-")
- アンダースコア ("_")
ここに、いくつかの有効な VTL での変数リファレンスの例があります。
 |
 |
 |
 |
$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1
|
 |
 |
 |
 |
$fooのように、VTL が変数を参照するとき、テンプレートまたは Java から指示的な
set がコード化するどちらからでも、変数はその値を得ることができます。
例えば、テンプレートが要求される時、Java 変数 $foo が値 bar
を持つならば、bar は Web ページ上で $foo の全てのインスタンスと置き換えられます。
代わりに、私はステートメントを含ます
出力は、この指令以降の $foo の全てのインスタンスは同じになります。
Properties
VTL リファレンスの第二の特色は、プロパティと特徴的なフォーマットを持つプロパティです。
短縮形表記法は、$文字に続く VTL 識別子と、ドット「.」によってつづく別の VTL 識別子
があります。
これらは、VTL での有効なプロパティ・リファレンスの例です:
 |
 |
 |
 |
$customer.Address
$purchase.Total
|
 |
 |
 |
 |
最初の例($customer.Address)をみてください。
それは、2つの意味を持つことができます。
それは意味することができます ― customer と確認される hashtable で見てください、そして、キー Address と関連される値を返してください。
しかし、$customer.Address は、また、メソッド(メソッドを呼ぶリファレンスは、次のセクションにおいて検討されることになります)を呼ぶことができます;
$customer.Address は、$customer.getAddress()
を書くことの略記された方法でもあります。
あなたのページが要求されるとき、Velocity はこれらの2つの可能性のうちどちらが意味をなすかについて決定して、それから適切な値を返します
Methods
メソッドは Java コードにおいて定義されて、役に立つ何かをすることができます、計算を実行するか、決定で到着するのが好きにしてください。
メソッドは「$」文字で始まり、それに続く VTL 識別子と、それに続く
VTL Method Body から構成されるリファレンスです。
VTL Method Body は、VTL 識別子と左括弧文字("("と、それに続くオプションのパラメータ・リスト、それに続く右括弧(")")から構成されます。
これらは、VTL での有効なメソッド・リファレンスの例です:
 |
 |
 |
 |
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )
|
 |
 |
 |
 |
最初の2つの例($customer.getAddress()と$purchase.getTotal())は、上のプロパティ・セクション($customer.Addressと$purchase.Total)において使われるそれらに類似したように見えるかもしれません。
あなたがこれらの例が関係がなければならないと思うならば、若干の流儀の中のいくつか、あなたは正しいです!
VTL プロパティが、VTL メソッドのために短縮形表記法として使われることができます。
プロパティ $customer.Address は、
メソッド$customer.getAddress() を使いながら正確な同じ効果を持ちます。
利用できるとき、一般にプロパティを使うことが、好ましいです。
プロパティとメソッドの主な違いは、あなたがメソッドにパラメータ・リストを指定することができるということです。
短縮形表記法は、以下のメソッドで使うことができます
 |
 |
 |
 |
$sun.getPlanets()
$annelid.getDirt()
$album.getPhoto()
|
 |
 |
 |
 |
我々は、これらのメソッドが太陽に属している惑星の名前を返すか、
我々のミミズに餌をやるか、アルバムから写真を得るのを期待するかもしれません。
以下のメソッドは、長い表記法だけが動作します。
 |
 |
 |
 |
$sun.getPlanet( ["Earth", "Mars", "Neptune"] )
## Can't pass a parameter list with $sun.Planets
$sisyphus.pushRock()
## Velocity assumes I mean $sisyphus.getRock()
$book.setTitle( "Homage to Catalonia" )
## Can't pass a parameter list
|
 |
 |
 |
 |
Formal Reference Notation
リファレンスのための短縮形表記法が上でリストされる例のために使われました、しかし、形式的な表記法がまた、リファレンスのためにあります。そして、それはデモをされます:
 |
 |
 |
 |
${mudSlinger}
${customer.Address}
${purchase.getTotal()}
|
 |
 |
 |
 |
ほとんどすべての場合には、あなたはリファレンスのために短縮形表記法を使用することになります、しかし、若干の場合には、形式的な表記法は正しい処理のために必要です。
$viceが文の名詞でベース語として使われることになっていた所で、
あなたが飛んで文を構成していたと思ってください。
目的は、ベース語を選ぶ誰かを許して、以下の2つの結果のうちの1つを生じることです:
「Jack is pyromaniac.」、あるいは、「Jack is kleptomaniac.」となります。
短縮形表記法を使用することは、この作業に不適当です。
以下の例を考えてみてください:
ここに曖昧さがあり、そして、Velocity は$viceではなく、
$vicemaniac があなたが使うつもりである識別子であると仮定します。
$vicemaniac のために値が見つからず、
それは $vicemaniac を返すことになります。
形式的な表記法を使用することで、この問題を解決することができます。
これで、Velocity は$vicemaniacではなく、$viceがリファレンスであるということが認識できます。
リファレンスがテンプレート中でテキストと直近のとき、形式的な表記法は多くの場合役に立ちます。
Quiet Reference Notation
Velocity が未定義リファレンスに遭遇したとき、その標準的な挙動はリファレンスのイメージを出力します。
例えば、以下のリファレンスは VTL テンプレートの一部として現れると思ってください。
 |
 |
 |
 |
<input type="text" name="email" value="$email"/>
|
 |
 |
 |
 |
最初にフォームがロードされるとき、変数のリファレンス $email には値がありません、
しかし、あなたは「$email」という値より空白のテキスト・フィールドを好みます。
Silentリファレンス表記法を使用することで、Velocity の標準的な挙動を回避します;
VTL で $email を使う代わりに、あなたは $!email を使います。
それで、上記の例は、以下のように見えます:
 |
 |
 |
 |
<input type="text" name="email" value="$!email"/>
|
 |
 |
 |
 |
これで、フォームの初期読み込みで、$email がまだ値を持たないとき、
「$email」の替わりに空の文字列が出力されます。
形式的なリファレンスと Silent リファレンス表記法を一緒に使うことができます。
それは以下でデモされます。
 |
 |
 |
 |
<input type="text" name="email" value="$!{email}"/>
|
 |
 |
 |
 |