S2Velocity

$user$
$date$

概要

Velocity Viewにおいて、Velocity Toolをコンテナ管理するためのツールです。 toolbox.xmlにクラスを登録するだけで、コンテナによって自動的に依存性注入が行なわれます。

S2Velocityを使えば、View技術にVelocityを用いた際のViewHelperパターンの利用法の幅を、 大幅に広げることができるでしょう。

使い方

web.xmlの記述

使い方は、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>
Velocity Toolを作る

通常の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は言う