Velocityの利点はたぶん、
- jar2つで動く
- Web画面の出力と非Web帳票出力との両方に使える
だ。
・・・更新がないのは安定しているからだろう。きっとそうだ。
http://velocity.apache.org 本家
http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html テンプレート記法
以下、Veloctityを、(Windows, Eclipse, Tomcatな環境で動かしてみた際のメモ。
- ダウンロード http://velocity.apache.org/download.cgi#engine
- velocity-1.7.zip
- 解凍して、
- EclipseのDynamicWebProjectのプロパティで、
- velocity-1.7.jar ...本体
- velocity-1.7-dep.jar ...依存ライブラリ
- ..を外部JARファイルとして追加
これで、クラスが作れる。
サンプル。データを持つクラスはつまり
それを使うクラスは仮にこんな。
→ getXXXは、テンプレートから$item.XXXという$item.getXXX()の短縮系を使えるというだけだった。自分の好みとしては不要かも。最初からxxx()というメソッドを作って、$item.xxx()と呼ぶ方がいい。かも。いやどうかな?
package hoge;
import java.io.Writer;
import java.math.BigDecimal;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class Controller {
public static void write(Writer out, String tmpl){
Item item = new Item();
item.name = "Some Item";
item.price = new BigDecimal("1500");
Velocity.init();
VelocityContext vc = new VelocityContext();
vc.put("item", item);
Velocity.evaluate(vc, out, "logTag", tmpl);
}
}
import java.io.Writer;
import java.math.BigDecimal;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class Controller {
public static void write(Writer out, String tmpl){
Item item = new Item();
item.name = "Some Item";
item.price = new BigDecimal("1500");
Velocity.init();
VelocityContext vc = new VelocityContext();
vc.put("item", item);
Velocity.evaluate(vc, out, "logTag", tmpl);
}
}
Tomact側で動かす準備は、
まず、JSPを用意。一応はテンプレートエンジンのはずであるが、そこからテンプレートエンジンを呼ぶ。
<%@page import="hoge.Controller"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
(...中略)
<body>
<%
Controller.write(
out,
"<h1>$item.name</h1><dl><dt>price</dt><dd>$item.price</dd></dl>"
);
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
(...中略)
<body>
<%
Controller.write(
out,
"<h1>$item.name</h1><dl><dt>price</dt><dd>$item.price</dd></dl>"
);
%>
</body>
</html>
- EclipseのプロジェクトのプロパティでDeployment Assemblyを選び、
- Java Build Path Entriesあたりから先ほどのVelocityのjar2つを追加
JSPにアクセスするとレンダリングされる。
通常は、テンプレートはitem.vmなどというテキストファイルを書いておいてVelocityに探させる。が、自分の好みとしては、そのテンプレートの内容も動的にしたいわけで、だからここでは仮にリテラルにしてある。