ひがやすを技術ブログ

電通国際情報サービスのプログラマ

レイアウト機能

まだ完全に実装し終えていないけど、仕様はほぼ決まったので、書いてみます。各ページは、/view/layout/layout.htmlがあれば、自動的にそのレイアウトが適用されます。
レイアウトを適用したくない場合は、PageクラスにgetLayout()メソッドを追加してnullを返すようにします。getLayout()で"/aaa/bbb.html"を返すことで適用したいレイアウトを変更することもできます。もちろん(?)、getLayout()の戻り値は動的に変更することもできます。
layout.htmlでは、基本的に、te:includeでheader、menu、footerを読み込み、個別のページの内容を挿入したい部分には、を記述します。そうすると、そのタグの場所に、子供のHTMLのbody配下が埋め込まれます。
レイアウト用のHTMLにパラメータを渡すには、requestScopeのマップ(HttpServletRequestのattribute)を使います。例えば、layout.htmlにリクエストのaaa属性の値を表示したい場合、


<span id="requestScope_aaa"/>
と記述します。PageからrequestScopeの値をセットするには、requestScopeのプロパティを宣言してそこに設定します。型がMapでプロパティ名がrequestScopeのプロパティを宣言しておくと、リクエストの属性をMapでラップしたオブジェクトが自動的に設定されます。

private Map requestScope;
...//setter,getter
public void prerender() {
requestMap.put("aaa", "hoge");
}