Java の template engine の Rythm を試す

Java の template engine で Rythm っていうのがあるんです。 HTMLのテンプレートに限らず、色々な用途でも使えそうです。

rythmengine.org

試してみました。

まずは、Java 。 mainメソッドを持った Model クラスです。

package app;

import org.rythmengine.Rythm;

public class Model {

    public String field = "<b>Hello, World</b>";

    public String getBar() {
        return "The World";
    }

    @Override
    public String toString() {
        return "toString was called";
    }

    public static void main(String[] args) {
        System.out.println(Rythm.render("foo.html", new Model(), null));
        System.out.println(Rythm.render("foo.txt", new Model()));
    }
}

次に html と普通のテキストファイルのテンプレート

rythm/foo.html

@args app.Model model, app.Model nullModel
<ul>
<li>model.field: @model.field</li>
<li>model.field.raw(): @model.field.raw()</li>
<li>model.getBar(): @model.getBar()</li>
<li>model: @model</li>
<li>nullModel?.getBar(): @nullModel?.getBar()</li>
<li>@ Escape: xxx@@gmail.com</li>
</ul>

rythm/foo.txt

@args app.Model model
model.field: @model.field

実行すると以下のように表示されます。

<ul>
<li>model.field: &lt;b&gt;Hello, World&lt;/b&gt;</li>
<li>model.field.raw(): <b>Hello, World</b></li>
<li>model.getBar(): The World</li>
<li>model: toString was called</li>
<li>nullModel?.getBar(): </li>
<li>@ Escape: xxx@gmail.com</li>
</ul>
model.field: <b>Hello, World</b>

Rythm#renderメソッドは、デフォルトで クラスパスの /rythm 配下のテンプレートを探すようです。テンプレートファイル名と、テンプレートに渡すパラメータを指定します。

@(アットマーク)で、テンプレート変数やテンプレート構文を指定します。 テンプレートの1行目でテンプレート引数を型を指定し宣言します。

個別に解説

@model.field

↑ Model の public フィールドを表示します。 デフォルトでHTMLエスケープされます。

@model.field.raw()

↑HTMLエスケープしたくない場合は、.raw() を追加します。

@model.getBar()

↑ EL式的に @model.bar みたくは書けません。

@model

↑ toString メソッドが返す文字列が表示されます。

@nullModel?.getBar()

↑ Nullセーフ。普通に null の Model にアクセスする時にエラーになりますが、ドットの前にクエッションマークをつけるとエラーを無視します。

xxx@@gmail.com

↑ @ 自体を表示したい場合は、2回繰り返します。

また、テンプレートファイルの拡張子が、 .txt の場合、HTMLエスケープはされません。

条件分岐の @if や繰り返しの @for は、もちろんあります。

Rythm に関する日本語の情報は、ほぼないですね。日本ではほぼ使われてないのでしょう。。

Java の Template Engine といえば、 FreeMaker や Velocity(古) が有名ですが、Rythm もなかなか良さそうです。 Play の Scala Template と似てる感じなんでしょうか? Type safe template みたいな感じなので、IDEでエラーチェックとか、補完とかできたら良いなと思う次第です。

HTMLのテンプレートエンジンに限って言えば、Thymeleaf や Mayaa(懐かしい) とかありますね。最近は、HTMLの組み立ては、クライアント側でやる方が多くなっているので、サーバサイドでのこの辺のこだわりは無くなりつつあります。。

以上


追記 Rythm って .net の Razaor っていうのをパクって作られたというのに気が付きました。