Velocityサンプルコード

いまさらだけど、Velocityを使うときのサンプルを載せてみる。
ライブラリは詳しく書かないけど、必要なので注意すること。

VelocitySample.java

import java.io.StringWriter;
import java.util.Map;
import java.util.Properties;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;

public class VelocitySample {
	private static final String MAIL_BODY_ENCODING = "MS932";
	private static final String TEMPLATE_PATH = "/tmp";

	static {
		Properties p = new Properties();
		p.setProperty("input.encoding", MAIL_BODY_ENCODING);
		p.setProperty("file.resource.loader.path", TEMPLATE_PATH);
		try {
			Velocity.init(p);
		} catch (Exception e) {
			//エラー処理は適宜追加
		}
	}

	public String getContent(Map paramMap) throws ResourceNotFoundException, ParseErrorException, Exception {
		if(paramMap == null) return null;

		VelocityContext vc = new VelocityContext();
		vc.put("host", paramMap.get("host"));
		vc.put("contextPath", paramMap.get("contextPath"));

		StringWriter sw = new StringWriter();
		Template template = Velocity.getTemplate("test.vm");
		template.merge(vc, sw);
		sw.flush();

		return sw.toString();
	}

}

test.vm

ここにテンプレートの内容を書きます。

http://$host$contextPath

テンプレート内での改行は有効です。

テンプレートのパスであるfile.resource.loader.pathを指定するのがポイントだよ。
ファイルは存在するのにResourceNotFoundExceptionが発生する場合は、これが原因。