PageLinkコンポーネントは文字通りページへのリンクを生成します。
[ページ仕様ファイル(Home.page)]
<page-specification class="gsf.samples.tapestry.Home"> <!-- PageLinkコンポーネント アンカー付きのリンクを出力するコンポーネント。 --> <component id="pageLink001" type="PageLink"> <!-- hrefに出力して欲しいページへのリンクを属性pageに記述する。 値は、リテラル値で指定しなければならない. (ex) literal:xxxxPage なお、値の部分にてliteralと指定しているのは、 何も接頭辞を付けずに文字列を指定した場合、 tapestryのページ仕様ファイルでは、ognlを指定した ことになってしまうから。 --> <binding name="page">literal:SecondPage</binding> </component> <component id="insertText004" type="Insert"> <binding name="value">literal:SecondPageへ</binding> </component> </page-specification>
[テンプレートファイル(Home.html)]
<html jwcid="@Shell"> <body jwcid="@Body"> <!-- ページリンクを作成 (PageLinkコンポーネントを使用) --> <br/> <hr/> <div id="page_link_001" align="center"> <b> PageLinkコンポーネントを使用して、ページリンクを出力 <br/> </b> <br/> 出力されたページリンク: <a href="./SecondPage.html" jwcid="pageLink001"><span jwcid="insertText004"></span></a> </div> <hr/> <br/> </body> </html>
今回は、リンクなので遷移先のページも軽く作成します。
[ページ仕様ファイル(SecondPage.page)]
<page-specification class="org.apache.tapestry.html.BasePage"> <component id="shell" type="Shell"> <binding name="title">literal:"Secondページ [FROM SERVER SIDE]"</binding> </component> <component id="body" type="Body"> </component> <component id="pageLink001" type="PageLink"> <binding name="page">literal:Home</binding> </component> </page-specification>
[テンプレートファイル(SecondPage.html)]
<html> <head> <title>Second Page [FROM LOCAL] </head> <body> <span jwcid="$content$"> <span jwcid="shell"> <span jwcid="body"> <br/> <hr/> <div id="page_link_001" align="center"> <a jwcid="pageLink001" href="./Home.html">Homeページに戻る</a> </div> <br/> <hr/> </span> </span> </span> ローカルで見たときのみに見える文言. <br/> </body> </html>
SecondPage側のテンプレートファイルにある
jwcid="$content$"
という記述は、Tapestryにとって特別なJWCになっていて、
このJWCの指定は、Tapestryに対してこのJWCが指定されているタグブロックの
内側のみを処理して、外側は無視しろという指示になります。
つまり、テンプレートファイルの
<span jwcid="$content$"> <span jwcid="shell"> <span jwcid="body"> <br/> <hr/> <div id="page_link_001" align="center"> <a jwcid="pageLink001" href="./Home.html">Homeページに戻る</a> </div> <br/> <hr/> </span> </span> </span>
のみが対象となり、Tapestryはその他の部分を無視します。
デザイナーさんが作成されたモックに対してTapestry化を
施す際にもともと存在するHTMLを削除したりする(不必要なmetaタグやjavascriptや文言など)と
今度はデザイナーさんが見たときにレイアウトが崩れたりするので
動的に変化させる部分に対して$content$を使用して、他は無視させます。
このようにすると、デザイナーさんが作成したモックも変えずに
ページに対して動的な処理を追加できることになります。
先ほどのSecondPage.htmlでは、実際にデプロイして画面を表示させると
$content$の外側にある
ローカルで見たときのみに見える文言.
という文言は表示されません。しかし、ローカルでブラウザからSecondPage.html
を開くと元のとおりに表示されるという具合です。
また、$content$と反対の意味をもつ特別なJWCも存在していまして、
こちらは、$remove$と記述します。意味はそのままですが、これが
記述されているタグブロックの内側をTapestryに無視させます。
なお、$content$と$remove$は、グローバルなJWCみたいなもので
ページ仕様ファイルなどに記述しなくてもそのまま使用できます。