さらに、mixer2のテンプレートは、ファイルである必要すらありません。HelloWorldの例のようなjava.io.Fileオブジェクトだけでなく、Stringもテンプレートとして読み込めるからです。メソッドはloadHtmlTemplate(java.lang.String)です。
たとえばECサイト構築のASPサービスがあるとします。店舗ごとにまったく異なるデザインを見せるために、テンプレートは店舗ごとに異なるものを管理する必要があります。ブログサービスでも似たようなものですね。
店舗が10個くらいのうちはいいのですが、数百、数千となってくると、テンプレートをファイルで管理することが難しくなってきます。商品データ等と同様に、テンプレートもDB上で管理したくなってきます。
しかしJSPではテンプレートをDBで管理することは事実上困難です。Velocityも、DataSourceResourceLoaderによってテンプレートをDB管理することはできるものの、J2EEサポートを必要とするといった制約があり、使い勝手はあまりよくないようです。
しかしmixer2では単なるStringとして定義されたテンプレートhtmlを扱えます。
SAStrutsでのHelloWorldサンプルを、テンプレートをDBから読み込むとすると次のようになります。
// O/RマッパーとしてS2JDBCを使っていて、
// TEMPLATE_TABLEのTEMPLATEというカラムに
// テンプレートが保存されていると仮定します。
public class IndexAction {
@Resource
protected Mixer2Engine mixer2Engine;
@Resource
protected JdbcManager jdbcManager;
public String htmlString;
@Execute(validator = false)
public String index() throws IOException, TagTypeUnmatchException {
TemplateTable tt = jdbcManager
.from(TemplateTable.class)
.where(eq(id(),999))
.getSingleResult();
String templateString = tt.template;
Html html = mixer2Engine.loadHtmlTemplate(templateString);
html.getById("hellomsg", Div.class).unsetContent();
html.getById("hellomsg", Div.class).getContent().add("Hello World!");
htmlString = mixer2Engine.saveToString(html);
return "index.jsp";
}
}
以上、TIPSでした。
No comments:
Post a Comment