トップ «前の日記(2006-07-23) 最新 次の日記(2006-07-26)» 編集

Ussy Diary


2006-07-24

[Java]FreeMarker

Velocity と同じテンプレートエンジンフレームワーク。 簡単に触ってみました。

FreeMarker-2.3.8 で動作検証。

FreeMarkerClient.java

public static void main(String[] args)  {
    Map<String, String> rootMap = new HashMap<String, String>();
    rootMap.put("message", "Hello World! >>>");

    StringWriter writer = new StringWriter();
    Writer out = new BufferedWriter(writer);

    Configuration cfg = new Configuration();
    try {
        Template t = cfg.getTemplate("template.ftl", Locale.US, "UTF-8");
        t.process(rootMap, out);
    } catch (TemplateException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        try {
            if(out != null) {
                out.close();
            }
        } catch(IOException ex) {
            // ignore
        }
    }

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

テンプレートファイルを実行ディレクトリ直下に template.ftl と template_ja_JP.ftl を置きます。

template.ftl

Head first FreeMarker
${message}

template_ja_JP.ftl

初めての FreeMarker
${message}

実行します。

実行結果

Head first FreeMarker
Hello World! >>>

Configuration#getTemplate に Locale.JAPAN を渡すと

初めての FreeMarker
Hello World! >>>

国際化対応が楽にできました(^^

サニタイジングをしたい場合は

template_ja_JP.ftl

初めての FreeMarker
${message?html}

とすると、

実行結果

初めての FreeMarker
Hello World! &gt;&gt;&gt;

めでたくサニタイジングできました。

ひとつひとつ面倒だなって場合は http://freemarker.sourceforge.net/docs/ref_directive_escape.html に書いてあるように

<#escape x as x?html>
${message}
</#escape>

と囲ってあげればいいようです。 Velocity はそんなに触ったことがないのですが、 テンプレートエンジンは FreeMarker でやっていこうかなと思いました。