ひがやすを技術ブログ

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

レイアウトの継承とViewのコンポーネントの仕様案

基本的に、makotan案ベース。
まず、Viewのコンポーネントですがinsertタグを使ってコンポーネントを読み込みます。paramタグでパラメータも渡せます。paramタグだけではなく、request,sessionのattributeで渡すことも出来ます。


<span m:inject="s:insert" m:src="myComponent.html">
<span m:inject="f:param" m:name="hoge" m:value="#{myvalue}/>
</span>
次にレイアウトの継承ですが、htmlタグのextends属性とinsertタグのオーバーライドを組み合わせます。insertタグでは、src属性のかわりに、name属性を指定し、継承先でオーバーライドできるようにします。src属性を指定してもOKで、継承先で上書きしても良いし、上書きせずにそのまま使うことも出来ます。継承先のinsertで上書きするときに、子タグで直接タグを記述せずにsrc属性でファイルを指定することもできます。

parent.html


...
<span m:inject="s:insert" m:name="aaa">
レイアウト確認用のダミー
</span>
...

child.html


<html m:extends="parent.html">
...
<span m:inject="s:insert" m:name="aaa">
aaaという名前のブロックをこの内容でオーバーライド
src属性で別のファイルに外だししても良い
</span>
...
</html>
継承はもちろんネスト可能で、最後に上書きしたものが、最終的なHTMLに反映されます。
上書きするには、同一のname属性を指定します。insertタグの上書きでparamだけを上書きすることも可能です。

parent.html


...
<span m:inject="s:insert" m:name="aaa" m:src="myComponent.html">
<span m:inject="f:param" m:name="hoge" m:value="#{myvalue}/>
</span>
...

child.html


<html m:extends="parent.html">
...
<span m:inject="s:insert" m:name="aaa">
<span m:inject="f:param" m:name="hoge" m:value="#{myvalue2}/>
</span>
...
</html>
いい感じ。
thx.
makotan