BACK
2010-09-05

Apache Velocityでハマ

やっとVelocityが動いたぜ!!

メッセージ出すだけで2時間近くかかってしまった…
ネット上のサンプルに色々と罠があったのでメモ。
(使用JAR:velocity-1.6.4.jar)

1.JARはvelocity-x.x.x.jarだけでOK、は嘘
ApacheのJARがいくつか必要です。私のテストした範囲では以下を要求されました。
commons-collections
commons-lang
log4j

2.テンプレートのパスはあってるのにNotFoundとか言われる!
Velocity.getTemplateに指定したパスが合っているのに、NotFoundとか言われて切れ気味の貴方。
わかります、わかります。
私も最初、こんな感じに書いてました。
(誤)Velocity.getTemplate(request.getServletContext().getRealPath("/WEB-INF/vtmpl/form.vm"));

残念ながらgetTemplateは「テンプレートフォルダ」からの相対パスしか受け付けてくれません。
というか、テンプレートはテンプレートフォルダ下にまとめる仕様のようです。

そんな訳で、どこかにテンプレート用のフォルダを作って、
そのパスをVelocityのプロパティ「file.resource.loader.path」に設定してあげてください。
例えばこんな感じ。
Velocity.setProperty("file.resource.loader.path", request.getServletContext().getRealPath("/WEB-INF/vtmpl"));

設定後は
Velocity.getTemplate("form.vm");
で読み込めます。


関係ないけどこういうファイルをWEB-INF下に置くのはありなのだろうか。
いっそ全然違う場所に置いたほうがいいのかもしれない。

それにしても何でフルパス指定で動かないんだ。
常識的に考えてそっちも用意するべきだろ!
と思うわけなんですが、そういうものでもないのだろうか。

まあ動いたからいいか(ぉ

BACK