読者です 読者をやめる 読者になる 読者になる

matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

Velocityの記述ルール

Velocity

現場のプロジェクトでView層にVelocityを使っているので、今更ながら記述ルールを整理。

ルール 記述例
オブジェクトを表示するときは必ずサイレント記法を使う $!hogeNullObj
オブジェクトのnull判断はオブジェクトをそのまま指定する #if($hogeNullObj)hoge#end
条件の反転はJavaと同様に!を付与する #if(!$hogeObj)hoge#end
オブジェクトの値の比較は必ずnullチェックしてから行う #if($hogeNullObj && $hogeNullObj == 1)hoge#end
foreach文ではオブジェクトがnullの場合もnullチェックは必要ない #foreach($hogeObj in $hogeNullObj)$hogeObj#end
マクロを使うときはマクロ側にサイレント記法を指定する $!esc.html($hogeNullObj)

検証

オブジェクト参照
記述 表示 説明
$hogeObj sample.Hoge@441371
$hogeObj.strVal hoge
$hogeObj.strBlankVal
$hogeObj.strNullVal $hogeObj.strNullVal オブジェクトがnullの場合は記述がそのまま出てしまう
$!hogeObj.strNullVal オブジェクトを表示するときは必ずサイレント記法を使う
$hogeObj.hogeObj sample.Hoge@441371
$hogeObj.hogeNullObj $hogeObj.hogeNullObj オブジェクトがnullの場合は記述がそのまま出てしまう
$!hogeObj.hogeNullObj オブジェクトを表示するときは必ずサイレント記法を使う
$hogeObj.fugaEnum FOO
$hogeObj.fugaEnum.id 1
$hogeObj.fugaEnum.val FOOVAL
$hogeObj.fugaNullEnum $hogeObj.fugaNullEnum オブジェクトがnullの場合は記述がそのまま出てしまう
$!hogeObj.fugaNullEnum オブジェクトを表示するときは必ずサイレント記法を使う
$hogeNullObj $hogeNullObj オブジェクトがnullの場合は記述がそのまま出てしまう
$!hogeNullObj オブジェクトを表示するときは必ずサイレント記法を使う
IF文
記述 表示 説明
#if($hogeObj)hoge#end hoge オブジェクトのnull判断はオブジェクトをそのまま指定する
#if($hogeNullObj)hoge#end
#if(!$hogeObj)hoge#end 条件の反転はJavaと同様に!を付与する
#if(!$hogeNullObj)hoge#end hoge
#if($!hogeNullObj)hoge#end if文中にサイレント記法を指定しても意味はない
#if($hogeNullObj == 1)hoge#end nullのオブジェクトで値の比較を行うとエラーログが出てしまう
#if($!hogeNullObj == 1)hoge#end
#if($hogeNullObj && $hogeNullObj == 1)hoge#end オブジェクトの値の比較は必ずnullチェックしてから行う

FOREACH文

記述 表示 説明
#foreach($hogeObj in $hogeObjArray)$hogeObj#end sample.Hoge@611b5c
sample.Hoge@14b3950
#foreach($hogeObj in $hogeNullObj)$hogeObj#end オブジェクトがnullの場合もnullチェックは必要ない

マクロ呼び出し

記述 表示 説明
$esc.html($hogeObj) sample.Hoge@441371
$esc.html($hogeNullObj) $esc.html($hogeNullObj) オブジェクトがnullの場合は記述がそのまま出てしまう
$esc.html($!hogeNullObj) $esc.html($!hogeNullObj) 同上
$!esc.html($hogeNullObj) マクロを使うときはマクロ側にサイレント記法を指定する
$!esc.html($!hogeNullObj) マクロを使うときはオブジェクト側のサイレント記法は不要