Spring-MVC/ステップ・バイ・ステップ

2008/04/08からのアクセス回数 17742

なぜVelocityを使うのか

Vecotiy活用術 でも示していますが、もう一度整理してみると

が、挙げられます。

プログラムが仕事の私にとって最後の「汎用のテンプレート」を習得することは大きなメリットです。

Velocityテンプレートをブラウザーで表示した例

Recipeの編集画面のVelocityテンプレートをブラウザーで表示すると以下のように表示されます。

edit_vm.jpg

Nameの値を保持しているrecipe.nameがテキスト領域に表示され、変数と値の対応を簡単に確認することが できます。

WebアプリケーションによってHtmlに変換された画面は、

edit_html.jpg

です。

VTLの構文

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の間にカンマがないことに注意してください)

コメント文

##行内コメントまたは、#*複数行コメント*#の形式で指定します。

Velocityをビューとする設定方法

viewResolverの指定

ビューの方式を指定しているのは、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テンプレートの追加

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を使用することができるようになります。 簡単でしょう!!

コメント

この記事は、

選択肢 投票
おもしろかった 13  
そうでもない 1  
わかりずらい 1  

皆様のご意見、ご希望をお待ちしております。


(Input image string)

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc