さらに、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