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は言う