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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

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

Avatar for Yu Watanabe

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>