Shale Clay Plugin その6
Clayのレイアウト機能に触れてみます.
HTMLテンプレートを利用したレイアウト機能は,S2JSFやFaceletsにも用意されています.
当然,Clayにも採用されています(いるはずです).
しかし今回は,ちょっと自信ありません.正しい使い方がわかりません...
まずはやってみましょう.
準備
layout.html
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>@title</title> </head> <body> <span jsfid="clay:clay" clayJsfid="@headercontent" allowBody="false">Header<br/></span> <span jsfid="clay:clay" clayJsfid="@bodycontent" allowBody="false">Body<br/></span> <span jsfid="clay:clay" clayJsfid="@footercontent" allowBody="false">Footer<br/></span> </body> </html>
header.html
<html xmlns="http://www.w3.org/1999/xhtml" jsfid="void" > <head jsfid="void" allowbody="false"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ヘッダモック</title> </head> <body jsfid="void"> <div style="background-color: green;"> ヘッダ </div> </body> </html>
footer.html
<html xmlns="http://www.w3.org/1999/xhtml" jsfid="void"> <head jsfid="void" allowbody="false"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>フッタモック</title> </head> <body jsfid="void"> <div style="background-color: blue;"> フッタ </div> </body> </html>
clay-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE view PUBLIC "-//Apache Software Foundation//DTD Shale Clay View Configuration 1.0//EN" "http://struts.apache.org/dtds/shale-clay-config_1_0.dtd"> <view> <component jsfid="layout" extends="clay"> <attributes> <set name="clayJsfid" value="/layout.html" /> </attributes> <symbols> <set name="@title" value="ディフォルトタイトル" /> <set name="@headercontent" value="/header.html" /> <set name="@bodycontent" value="space" /> <set name="@footercontent" value="/footer.html" /> </symbols> </component> </view>
body.html
<html xmlns="http://www.w3.org/1999/xhtml" jsfid="layout" title="ボディ1" bodycontent="/body1.html"> <head jsfid="void" allowbody="false"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ボディ1</title> </head> <body jsfid="void" allowbody="false"> ダミーボディ </body> </html>
body1.html(2006/06/20 修正)
<html xmlns="http://www.w3.org/1999/xhtml" jsfid="void"> <head jsfid="void" allowbody="false"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ボディ1</title> </head> <body jsfid="void"> <div style="background-color: red;"> ぼでぃ. </div> </body> </html>
動かしてみる
http://localhost:8080/sample/body.html
表示されましたね...
しかし,なんだか無駄な作業が含まれている気がします.
いや,bodyのHTMLが明らかにおかしい...
layout.html
ここでは,@でシンボルを定義しています.
@title,@headercontent,@bodycontent,@footercontentのシンボルはclay-config.xmlで定義されます.
clay-config.xml
<symbols> <set name="@title" value="ディフォルトタイトル" /> <set name="@headercontent" value="/header.html" /> <set name="@bodycontent" value="space" /> <set name="@footercontent" value="/footer.html" /> </symbols>
@headercontentでは,/header.htmlを指定しています.
@footercontentでは,/footer.htmlを指定しています.
body.html
<html xmlns="http://www.w3.org/1999/xhtml" jsfid="layout" title="ボディ1" bodycontent="/body1.html">
jsfidには,clay-config.xmlで定義した'layout'を定義します.
title,bodycontentを上書きしています.
この指定によって,タイトルに"ボディ1",コンテンツに"body1.html"が定義されます.
そして,最後にbody1.htmlで実際のbodyの中身が定義されます...
この,body.htmlとbody1.htmlが1つにならないとかなり面倒くさいですよね.
これは,使い方を間違っているのだろうか?
もう少し,調べる必要がありそうです...