簡単な使い方
Hello worldと出力する場合、VelocityContextを作成して、Velocityのevaluateメソッドでテンプレート文字列を置き換えます。
(文字列の変わりにReaderからも読み込めます)
String result="";
Velocity.init();
VelocityContext context = new VelocityContext();
context.put( "name", new String("world") );
StringWriter writer=new StringWriter();
Velocity.evaluate
evaluate(context,writer,"","hello $name");
result=writer.toString();
System.out.println(result);
テンプレートファイルを使う
テンプレートを読み込み、テンプレートにVelocityContextを合わせる
上記の方法は単純に文字列を読み込みますので、どのファイルでも使えますが、この方法は、ファイルは相対パスで指定します。
(パスの開始位置は、デフォルトでは現在のフォルダーですが、設定の file.resource.loader.path などで指定します)
String result="";
Velocity.init();
VelocityContext context = new VelocityContext();
context.put( "name", new String("world") );
StringWriter writer=new StringWriter();
Velocity.evaluate(context,writer,"a","hello $name");
Template template=Velocity.getTemplate("hello.vm", "SJIS");
template.merge(context,writer);
System.out.println(writer.toString());
サーブレットで使う場合
サーブレットには専用の方法もありますが、これら普通の方法を使う場合気をつけるべきことがあります。
Templateを使う場合、現在のディレクトリーから始まるデフォルトの設定では、テンプレートをファイルをうまく読み込めません。
例えば、velocityファイルをWEB-INF/velocityの中にある場合、ServletContextよりフォルダーの場所を指定してその後にプロパティーで指定する必要があります。
(VelocityServletなどはこれらを設定ファイル内で指定します)
String dir=getServletContext().getRealPath("
WEB-INF/
velocity");
Velocity.setProperty("file.resource.loader.path",dir );
//必ず初期化前に指定します。
Velocity.init()
指定が間違っている場合 以下のようなエラーが出ます。初期化前に指定は忘れやすいので気をつけましょう。
org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource *.vm
また、Servletの場合、Velocityは一度初期化してインスタンス化していると次にinit()を呼び出しても初期化しないようになっています。
が残っている場合があるので、後から指定した値が有効にならず、エラーが出る場合があります。
必ず、サーブレットを再起動しましょう。そして、Velocity.getProperty("file.resource.loader.path")の値を確認しましょう。
また、#parseを使って別のvmファイルを読み込む場合のパスもこれで、指定した場所からになるのを気をつけましょう。
Velocity.evaluateの方法で、ファイル読み込んで変換する場合、#parse("velocity/import.vm") みたいに間違って記述することがありますが
この場合、指定した場所からの位置、つまり#parse("import.vm") としなければなりません。