2008/04/08からのアクセス回数 18205
Vecotiy活用術 でも示していますが、もう一度整理してみると
が、挙げられます。
プログラムが仕事の私にとって最後の「汎用のテンプレート」を習得することは大きなメリットです。
Recipeの編集画面のVelocityテンプレートをブラウザーで表示すると以下のように表示されます。
Nameの値を保持しているrecipe.nameがテキスト領域に表示され、変数と値の対応を簡単に確認することが できます。
WebアプリケーションによってHtmlに変換された画面は、
です。
Velocityテンプレートで使用されているテンプレート言語(以下VTLと記す)の構文は、非常にシンプルです。 詳しくは、 VTLのページ を参照してください。
変数の値を参照する方法には、以下の3通りがあります。
通常表記と沈黙表記の違いは、参照する変数の値がnullの場合に$変数名を表示するのか、何も表示しないかです。
属性へのアクセスは、変数名.(ドット)の後に属性名を指定します。
変数がハッシュマップの場合には、キーを属性として指定することでハッシュマップの値を参照することができます。
$変数名.メソッド名()または$変数名.メソッド名(パラメータ)の形式でjavaのメソッドを呼び出すことができます。
変数への代入は以下の形式で使用します。
#set($lref = rref)
例)moneyに123をセットします
#set($money="123")
条件分岐処理は、以下の形式で使用します。
#if (condition) output #elseif (condition) output #else output #end
ループ処理は、以下の形式で使用します。
#foreach($ref in $list) statement #end
vmのインクルードには、parseとincludeの2種類があります。
使用方法は、
#include(テンプレートファイル名) #parse(テンプレートファイル名)
です。
よく使う処理をマクロとして登録することができます。 マクロの定義は以下の通りです。
#macro($vmname $arg1, $arg2, ... $argn) VTL 構文 #end
マクロの呼び出しは、#vmname( $arg1 $arg2 ) のように呼び出します($arg1と$arg2の間にカンマがないことに注意してください)
##行内コメントまたは、#*複数行コメント*#の形式で指定します。
ビューの方式を指定しているのは、coverc-servlet.xmlのviewResolverタグの部分です。
これを以下の定義に置き換えます。
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="WEB-INF/velocity/" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="suffix" value=".vm" /> </bean>
この設定方法では、日本語を表示する場合ブラウザーのテキストエンコーディングをその都度 指定する必要があります。 日本語を表示す設定は、Spring-MVCのビューにVelocityを使いたいを参照してください。
Velocityを使用するため、pom.xmlにvelocityのライブラリを追加します。
<dependency> <groupId>velocity</groupId> <artifactId>velocity-dep</artifactId> <version>1.4</version> </dependency>
いつものように、クラスパスを変更します。
$ rm .project .classpath $ mvn eclipse:eclipse -DdownloadSources=true
Velocityテンプレートは、src/main/webapp/WEB-INF/velocityディレクトリに配置します。
editRecipe.vmは、次のようになります。
<html> <head> <title>Recipes</title> </head> <body> Edit Recipe </body> <form method="post" action="#springUrl("/editrecipe.htm")"> <input type="hidden" name="id" value="$!recipe.id"> <table> <tr> <td>Name:</td> <td><input type="text" name="name" value="$!recipe.name" size="20"></td> <td></td> </tr> <tr> <td colspan="3"> <input type="submit" value="Save Changes"/> </td> </tr> </table> </form> </html>
同様にswitchboard/listRecipes.vmは、次のようになります。
<html> <head> <title>Recipes</title> </head> <body> <table> #foreach ($recipe in $recipeList) <tr> <td>${recipe.id}</td> <td>${recipe.name}</td> #set( $editLink = "/editrecipe.htm?id=${recipe.id}" ) <td><a href="#springUrl(${editLink})">[edit]</a></td> </tr> #end </table> </body> </html>
これだけの処理で、ビューでVelocityを使用することができるようになります。 簡単でしょう!!
この記事は、
皆様のご意見、ご希望をお待ちしております。