Velocity

Velocity
Javaベースのテンプレートエンジン
Web ページや SQL、PostScript といった出力をテンプレートから生成
Javaコードで定義されたメソッドが参照可
JSP、PHPの代替的もの

■VTL
Velocity テンプレート言語(VTL:Velocity Template Language)

□VTL識別子
[英字]から始め [英数字,ハイフン,アンダースコア]で続けること

□VTL指示子認識子[#]
指示子は[#]で始めること

□変数認識子[$]
変数は[$]で始めること

□値識別子[引用符]
値は["]["]で囲むこと

□コメント識別子
・1行コメント
[##]で開始
行末で終了
・複数行コメント
[#*]で開始
[*#]で終了

■[VTL]レファレンス
3種類
・変数
・プロパティ
・メソッド
リファレンスを出入りするものは 全て文字列オブジェクト
文字列オブジェクトでない物は toStringで影で強制変換

□変数
正式表記:[$]+[{]+VTL識別子+[}]
簡略表記:[$]+VTL識別子
値は [set]識別子かjavaコードから取得

□プロパティ
正式表記:[$]+[{]+VTL識別子+ドット[.]+他のVTL識別子+[}]
簡略表記:[$]+VTL識別子+ドット[.]+他のVTL識別子
--------------------
$customer.Address
--------------------
customerで識別されるhashtableを見て キーAddressと関連づけられる値

$customer.Address()
を得る

□メソッド
正式表記:[$]+[{]+VTL 識別子+VTLメソッドボディ+[}]
簡略表記:[$]+VTL 識別子+VTLメソッドボディ
*VTLメソッドボディ
表記:VTL 識別子+左括弧[(]+パラメータ/パラメータリスト(オプション)+右括弧[)]
--------------------
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$!person.setAttributes( ["Strange", "Weird", "Excited"] )
--------------------

□エスケープ
VTL特殊文字はバックスラッシュ[\]でエスケープ
--------------------
#set( $hoge = "piyo" )
1.$hoge
2.\$hoge
3.\\$hoge
4.\\\$hoge
1.$hogehoge ##未定義変数
2.\$hogehoge
3.\\$hogehoge
4.\\\$hogehoge
--------------------
1.piyo
2.$hoge
3.\piyo
4.\$hoge
5.$hogehoge
6.\$hogehoge
7.\\$hogehoge
8.\\\$hogehoge

□大小文字置換
Velocityは Javaのイントロスペクション機能とBean機能を利用して
コンテキスト内のオブジェクトとオブジェクトメソッドの両方のリファレンス名を解決できる。
--------------------
$foo.getBar()
same as
$foo.bar

$data.getUser("jon")
same as
$data.user("jon")

$data.getRequest().getServerName()
same as
$data.Request.ServerName
same as
${data.Request.ServerName}
--------------------

□沈黙リファレンス
Velocity が未定義のリファレンスに遭遇したとき、
通常の挙動として、リファレンスの記述をそのまま出力する。
--------------------
$hoge ##未定義の場合 [hoge]と出力される
$!hoge ##未定義の場合 [](ブランク)と出力される
$!{hoge} ##未定義の場合 [](ブランク)と出力される
--------------------

■[VTL]指示子
スクリプト要素

□[set]指示子
リファレンスの値を設定
書式:#set( $ref = [ ", ' ]arg[ ", ' ] )
#set 指示子は、リファレンスの値をセットする。
値は、変数リファレンスかプロパティリファレンスにセットされる。

[[変数が左側で値が右側で[=]が区切]]
左辺(LHS:LeftHandSide):変数リファレンス/プロパティリファレンス
右辺(RHS:RightHandSide):変数リファレンス/文字列リテラル/プロパティリファレンス/メソッドリファレンス/数値リテラル/配列リスト(ArrayList)
--------------------
#set( $monkey = $bill ) ## 変数リファレンス
#set( $monkey.Friend = "monica" ) ## 文字列リテラル
#set( $monkey.Blame = $whitehouse.Leak ) ## プロパティリファレンス
#set( $monkey.Plan = $spindoctor.weave($web) ) ## メソッドリファレンス
#set( $monkey.Number = 123 ) ## 数値リテラル
#set( $monkey.Say = ["Not", $my, "fault"] ) ## 配列リスト

$monkey.Say.get(0) ## =[Not]
--------------------

※右辺がnullとして評価された場合  null値は左辺に代入されない。
※[set]指示子には #end 文はない。

□文字列リテラル
["]で文字列リテラルを囲むと 中身がパース/処理される。
※[']は バースされない。
※[']のパースは [velocity.properties]#[stringliterals.interpolate=false]で変更可
--------------------
#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set( $template = "$directoryRoot/$templateName" )
$template

#set( $foo = "bar" )
$foo
#set( $blargh = '$foo' )
$blargh

#set($prefix = "prefix")
#set($suffix = "suffix")
#set($hoge = "$prefix$suffix")
$hoge
--------------------

--------------------
www/index.vm

bar
$foo

prefixsuffix
--------------------

※算術式も記述可
・加算: #set( $value = $foo + 1 )
・減算: #set( $value = $bar - 1 )
・乗算: #set( $value = $foo * $bar )
・除算: #set( $value = $foo / $bar )
・剰余: #set( $value = $foo % $bar )


□if/elseif/else文
条件分岐
書式: #if( [condition] ) [output] [ #elseif( [condition] ) [output] ] * [ #else [output] ] #end
--------------------
#if ($foo == $bar)
AND
#elseif ( $foo || $bar )
OR
#else ( !$foo ) ## NOT SAME AS [$!foo](沈黙リファレンス)
NOT
#end
--------------------

□foreach文
オブジェクトのリストでループ
書式: #foreach( $ref in arg ) statement #end
※Vector、Hashtable、配列の場合のみ使用可
--------------------
<'ul>
#foreach( $product in $allProducts )
<'li>$product<'/li>
#end
<'/ul>
--------------------
※ループカウンタ変数は デフォルト1
([velocity.properties]#[directive.foreach.counter.initial.value]で変更可)

□include
ローカルファイルのインポート
書式:#include( arg[, arg2, ... argn] )
ファイルは、#include指示子が定義される位置に挿入される。
テンプレートエンジンでの中身の処理はしない。
※TEMPLATE_ROOT以下にあるファイルだけインポート可
--------------------
#include( "one.gif","two.txt","three.htm" )
--------------------

□parse
VTLを含むローカルファイルのインポート
書式:#parse( arg )
※TEMPLATE_ROOT以下にあるファイルのみインポート可
--------------------
#parse( "parsefoo.vm" )
--------------------

□#stop
テンプレートエンジンの実行を停止

□#macro
Velocimacro
VTLテンプレートのセグメントの繰り返し
書式: #macro( vmname $arg1[, $arg2, $arg3, ... $argn ] ) [ VM VTL code... ] #end


ref:
http://www.jajakarta.org/velocity/velocity-1.3.1/docs-ja/user-guide.html

tag : Velocity

2008-08-19 01:39 : j2ee : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud