2013年11月28日木曜日

VelocityをTomcat(JSP)で使う

JavaテンプレートエンジンのVelocity。2011年から更新されていない様子で「いまさら」なのかはよく知らないが、見る限りテンプレートとしての機能は十分そうだし、導入が簡単そうなので試してみる。

Velocityの利点はたぶん、

  • jar2つで動く
  • Web画面の出力と非Web帳票出力との両方に使える
だ。



・・・更新がないのは安定しているからだろう。きっとそうだ。

http://velocity.apache.org 本家
http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html テンプレート記法


以下、Veloctityを、(Windows, Eclipse, Tomcatな環境で動かしてみた際のメモ。

  1. ダウンロード http://velocity.apache.org/download.cgi#engine
    1.   velocity-1.7.zip
  2.  解凍して、
    1. EclipseのDynamicWebProjectのプロパティで、
      1. velocity-1.7.jar ...本体
      2. velocity-1.7-dep.jar ...依存ライブラリ
    2. ..を外部JARファイルとして追加


これで、クラスが作れる。

サンプル。データを持つクラスはつまりgetXXXがあればいいらしい。ここではItemクラスを作った。
それを使うクラスは仮にこんな。

→ 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);

}
}



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>



  1. EclipseのプロジェクトのプロパティでDeployment Assemblyを選び、
  2. Java Build Path Entriesあたりから先ほどのVelocityのjar2つを追加


JSPにアクセスするとレンダリングされる。


通常は、テンプレートはitem.vmなどというテキストファイルを書いておいてVelocityに探させる。が、自分の好みとしては、そのテンプレートの内容も動的にしたいわけで、だからここでは仮にリテラルにしてある。


0 件のコメント:

コメントを投稿