1. Mixer2 で作る
カスタムテンプレートエンジン
第八回#渋谷java
Jun Futagawa (@jfut)
Mixer2 で作るカスタムテンプレートエンジン, September 20, 2014 1
2. 自己紹介
Jun Futagawa
有限会社インテグシステム
Twitter: @jfut
好きなこと: Linux サーバー・ネットワーク構築
今好きなフレームワーク: Cubby, S2JDBC, Mixer2
Mixer2 で作るカスタムテンプレートエンジン, September 20, 2014 2
3. 今日のお話
Mixer2 で作るカスタムテンプレートエンジン
素材: Mixer2 テンプレートエンジン
http://mixer2.org/
作者: @nabedge さん
テンプレートファイルはHTML ファイル
HTML の構造をマッピングしたJava のクラスインスタンスに変換
HTML タグに対応する個別のJava クラス型を持つ
Java の世界でタグや値の合成操作
テンプレート記述言語を覚えなくて良い
new Html();
new Body();
new Div(); new P()
Html
Head Body
Div P
Mixer2 で作るカスタムテンプレートエンジン, September 20, 2014 3
4. Mixer2: 利用例
HTML ファイルをMixer2 でインスタンス化、値を書き換えて出力
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
... <head /> 省略...
<body>
<article>
<section>
<h1>headline</h1>
<p id="HERE.msg">here comes hello message</p>
<span class="DEBUG">dummy span</span>
<p class="DEBUG">dummy p</p>
</section>
</article>
</body>
<html>
Mixer2Engine m2e = new Mixer2Engine();
Html html = m2e.loadHtmlTemplate(new File("hello.html"));
H1 h1 = html.getDescendants(H1.class).get(0);
h1.unsetContent();
h1.getContent().add("New Headline");
P p = html.getById("HERE.msg");
p.setId("msg");
p.unsetContent();
p.getContent().add("Hello World!");
// or html.removeDescendants("DEBUG");
List<AbstractJaxb> debugTagList = html.getDescendants("DEBUG");
for (AbstractJaxb abstractJaxb : debugTagList) {
html.remove(abstractJaxb);
}
// タグで取得
// コンテンツ削除
// コンテンツ追加
// id 属性で取得
// id 属性の値を設定
// コンテンツ削除
// コンテンツ追加
// ↓class 属性で取得
// タグごと削除
hello.html
特別な記法のないHTML Java コードの例
... 省略...
<article>
出力: m2e.saveToString(html);
<section>
<h1>New Headline</h1>
<p id="msg">Hello World!</p>
</section>
</article>
... 省略...
DOM 操作ではないため
判りやすい
(ちょっと冗長ではある)
* AbstractJaxb はMixer2 が持つHTML タグ用クラスのスーパークラス
Mixer2 で作るカスタムテンプレートエンジン, September 20, 2014 4