Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAXBとテンプレートエンジンMixer2

 JAXBとテンプレートエンジンMixer2

日本Javaユーザーズグループ クロスコミュニティカンファレンス2013春 講演
WebデザイナーフレンドリーなJavaテンプレートエンジン"Mixer2"

Yu Watanabe

May 11, 2013
Tweet

More Decks by Yu Watanabe

Other Decks in Technology

Transcript

  1. JAXBとテンプレートエンジン Mixer2 - さらばJSP - 10 JJUG CCC 2013 Spring

    日本Javaユーザーズグループ クロスコミュニティカンファレンス R5-1 ベルサール西新宿 2013-05-11
  2. テンプレートエンジン 13 JSP:一番身近なテンプレートエンジン こんにちは <% if (name == null) {

    %> ゲストさん <% } else { %> <%= name %>さん <% } %> 通常のJava言語、EL式、カスタムタグで書く
  3. Mixer2 17 こんにちは <span id=“name”>ななし</span>さん Span span = html.getById(“name”, Span.class);

    span.getContent.clear(); span.getContent.add(“ヤマダ”); // これで <span id=“name”>ヤマダ</span>さん // が出力 テンプレートは純粋なXHTMLとCSS 値の埋め込みやロジックは普通のJava
  4. JAXBによるmarshalとunmarshal 21 JAXB API <root> <foo>aaa</foo> <bar>bbb</bar> <foo>ccc</foo> <bar>ddd</bar> </root>

    root foo bar アンマーシャル マーシャル XML文字列 Javaオブジェクト
  5. Mixer2によるロードとセーブ 22 Mixer2 &JAXB <html> <head> … </head> <body> …

    </body> </html> Html Head Body loadHtmlTemplate saveToString XHTML Javaオブジェクト
  6. Mixer2のHTMLタグとJava型 23 <html>…</html> ⇔ org.mixer2.jaxb.xhtml.Html <div>…</div> ⇔ org.mixer2.jaxb.xhtml.Div • Mixer2では

    HTMLタグと Javaオブジェクトを相互マッピング JAXBのXJCで自動生成した約120種 のJavaクラスを利用
  7. 複数要素はListになる 25 <html> <body> <p>Hello World</p> foo <span>bar</span> </body> </html>

    index 型 0 P 1 String 2 Span Html html = mixer2Engine .loadHtmlTemplate( “template.html”); java.util.List<Object> list = html.getBody() .getContent(); listの中身 template.html
  8. Mixer2の欠点 1. 性能 →気にするほどの影響かどうか?がポイント 2. HTML ではなく XHTML が必須 →HTML5もXML文法で書けばOK

    3. <!-- コメント --> は消えてしまう →どうでもいい? 4. スクリプトレットが無い代わりにJavaコー ドが肥大化する →Ctrl+Space補完が効くならいいのでは? 35
  9. Mixer2とJUnitの基本 40 タグ型 オブジェクト 加工前 タグ型 オブジェクト 加工後 処理 span.unsetContent();

    span.getContent().add(“Hello”); assertThat( span.getContent().get(0).toString() ,is(“Hello”));
  10. Mixer2の部分マーシャルの活用 45 Div div = html.getById(“foo”,Div.class); String str = m2Engine.saveToString(div);

    1. 特定のタグ(ここではdiv)だけを文字列化 2. ほかのテンプレート形式に混ぜて出力可能 <%-- JSP --%> <html> <body> <%=str %> </body> </html> <html> <body> <div id=“foo”>.......</div> </body> </html>