Tuesday, October 1, 2013

XHTMLタグスニペット生成器としてのMixer2

Mixer2はXHTML専用のテンプレートエンジンです。 しかし、Mixer2が内部でJAXB(Java Architecture for XML Binding)を使用しているため、 単なるテンプレートエンジンにとどまらない使い方が可能です。
大きく分けて、Mixer2には次のような側面があります。
  1. JSPやVelocityに代わる技術としてのMixer2
  2. XHTMLパーサーとしてのMixer2
  3. XHTMLタグスニペット生成器としてのMixer2
この記事では、3番目の、XHTMLタグスニペット生成器としてのMixer2の使い方を紹介します。
Mixer2は、XHTMLをパース - loadHtmlTemplate() - する場合には フルHTML、つまり<html>...</html>までのHTML全体を与える必要があります。
しかしXHTMLタグを出力 - saveToString() - する場合には 任意のタグのみをString化することが可能です。 この特徴をうまく使えば、JSPのカスタムタグのようなものを 簡単なJavaコーディングのみで作ることができます。
たとえば、ベースとしてJSPを使いつつもMixer2を活用したい場合、下の図のような使い方が可能です。

タグを新規に作る場合は目的のタグ型クラスを new すればよいのですが、 TagCreatorクラスでも可能です。 TagCreatorのほうがeclipse等のIDE上でコード補完が効くので便利です。
Div div = TagCreator.div();
Span span = TagCreator.span();
span.getContent().add("Hello World !");
span.setStyle("color:red;");
div.getContent().add(span);
String result = mixer2Engine.saveToString(div);
System.out.println(result);
output:
Hello World !
table タグを作る場合にはTableBuilderクラスが便利です。
String[][] data = new String[][]{
    // id, name, price
    {"1", "cookie", "2.50"},
    {"2", "candy",  "3.75"}
};

TableBuilder tBuilder = new TableBuilder();
for (String[] row : data) {
    tBuilder
        .addTr()
        .addTd(row[0])
        .addTd(row[1])
        .addTd(row[2]);
}
Table table = tBuilder.build();
String str = mixer2Engine.saveToString(table);
System.out.println(str);
output:
1 cookie 2.50
2 candy 3.75
For more detail of TableBuilder, see Mixer2 official site.
いかがでしたか? できあがったタグオブジェクトをstring化したあとなら jspやvelocityに埋め込むこともできます。 Mixer2と他のテンプレートエンジンの共存は十分に可能です。 ぜひ組み合わせ技も考えてみてください。

No comments:

Post a Comment