Velocity Viewにおいて、Velocity Toolをコンテナ管理するためのツールです。 toolbox.xmlにクラスを登録するだけで、コンテナによって自動的に依存性注入が行なわれます。
S2Velocityを使えば、View技術にVelocityを用いた際のViewHelperパターンの利用法の幅を、 大幅に広げることができるでしょう。
使い方は、Velocity Viewを使う際に、web.xmlに org.apache.velocity.tools.view.servlet.VelocityViewServlet を登録する代わりに net.mogra.seasar.velocity.tools.S2VelocityViewServlet を登録するだけです。
<servlet>
<servlet-name>velocity</servlet-name>
<!-- <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class> -->
<servlet-class>org.seasar.velocity.tools.S2VelocityViewServlet</servlet-class>
<init-param>
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
通常のView Toolは無引数のコンストラクタが無くてはいけませんが、 S2Velocityを使うと有引数のコンストラクタを定義できます。
package org.seasar.velocity.tools.examples;
public class SampleTool {
private IHello fHello;
public SampleTool(IHello hello, IItemDAO itemDAO) {
fHello = hello;
}
public String getString() {
return fHello.getHello();
}
}
このSampleToolをVelocityのtoolbox.xmlへ登録します。 このView Toolは、toolbox.xmlに登録されていれば、diconファイルに登録しなくとも 自動的にコンテナ管理されます。上の有引数のコンストラクタに対して コンストラクタ注入(Constructor Injection)が行なわれることになります。
<?xml version="1.0"?>
<toolbox>
<tool>
<key>sampleTool</key>
<scope>request</scope>
<class>org.seasar.velocity.tools.examples.SampleTool</class>
</tool>
</toolbox>
app.diconには、以下の通りにコンポーネントが登録されているとします。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component class="org.seasar.velocity.tools.examples.HelloImpl"/> </components>
Webアプリケーションを立ち上げて、以下のvmテンプレートへアクセスすると、 下のブラウザ画面のような結果が表示されるはずです (HelloImpl#getHello()メソッドは、文字列"こんにちは"を返す実装であるとします)。
$sampleTool.string とVelocityは言う