Java の template engine の Rythm を試す
Java の template engine で Rythm っていうのがあるんです。 HTMLのテンプレートに限らず、色々な用途でも使えそうです。
試してみました。
まずは、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: <b>Hello, World</b></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 っていうのをパクって作られたというのに気が付きました。