staticメソッドにアクセスする

FreemarkerJavaクラスのstaticメソッドにアクセスする方法。

直接はできないっぽいが、freemarker.ext.beans.BeansWrapperを使うと比較的楽に実現可能。

ソース:

Configuration cfg = new Configuration();
cfg.setTemplateLoader(new ClassTemplateLoader(getClass(), "/"));

Map<String, Object> root = new HashMap<String, Object>();
root.put("statics",
    BeansWrapper.getDefaultInstance().getStaticModels());

StringWriter writer = new StringWriter();

cfg.getTemplate("sample.ftl").process(root, writer);

System.out.println(writer.toString());

sample.ftl

Current time is ${statics["java.lang.System"].currentTimeMillis()?c}

結果:

Current time is 1256895102406

ちなみにテンプレート中の「?c」は数字をそのまま表示するための指定。