Tiles定義について

Tiles定義により、表示できるコンテンツの一部が定義されます。各定義は、1つのレイアウト・ファイルにコンテンツ・ファイルを移入する方法を指定します。

Tiles定義は、個別のページに含めるか、またはTiles定義ファイルに集約できます。

ここでは、次の内容について説明します。

Tiles定義

Tiles定義は、レイアウト・テンプレートを指定し、そのレイアウトの移入に使用できるコンテンツ・ファイルのセットを1つ指定します。

Webアプリケーションのすべてのページに対して1つのレイアウト・テンプレートを定義した場合、アプリケーションに表示する異なる本文ページごとに1つの定義を作成できます。すると、アプリケーションにより、毎回まったく同じレイアウト・ページに、使用されている定義によって異なるコンテンツが各領域に移入されて表示されます。

Tiles定義は、JSPページまたはTiles定義ファイルに含めます。

たとえば、JSPページに含める次の定義により、標準のレイアウト・ファイルへの移入方法を定義できます。

<tiles:definition id="welcome" page="layoutPage.jsp">
  <tiles:put name="title" value="Welcome page"/>
  <tiles:put name="header" value="/header.jsp"/>
  <tiles:put name="menu" value="/menu.jsp"/>
  <tiles:put name="body" value="/welcome.jsp"/>
  <tiles:put name="footer" value="/footer.jsp"/>
</tiles:definition>    

同じ定義をTiles定義ファイルに含める場合、次のようになります。

<tiles-definitions>
  <definition name="welcome" page="/layoutPage.jsp">
    <put name="title" value="Welcome page"/>
    <put name="header" value="/header.jsp"/>
    <put name="menu" value="/menu.jsp"/>
    <put name="body" value="/welcome.jsp"/>
    <put name="footer" value="/footer.jsp"/>
  </definition>
</tiles-definitions>    

これらの定義はいずれも、レイアウト・テンプレート・ページ/layoutPage.jspを使用し、ここにvalueパラメータで指定されているテキストまたはコンテンツ・ページを移入することを指定しています。

Tiles定義の拡張

Tiles定義は他のTiles定義を拡張できるため、Tiles定義の階層を作成できます。

Tiles定義を作成する際、他の定義を拡張するよう指定できます。新しい定義は親定義を継承し、親の属性をオーバーライドできます。

Tiles定義の拡張には、典型的な2つの用途があります。

たとえば、次にTiles定義ファイルのマスター・レイアウト・ページの定義の例を示します。タイトルとボディの属性は、オーバーライドする定義によって定義するよう、空白のままになっています。

<definition name="master" page="/layoutPage.jsp">
  <put name="title" value=""/>
  <put name="header" value="/header.jsp"/>
  <put name="menu" value="/menu.jsp"/>
  <put name="body" value=""/>
  <put name="footer" value="/footer.jsp"/>
</definition>    

次の定義により、空白の属性の定義を提供できます。

<definition name="welcome" extends="master">
  <put name="title" value="Welcome"/>
  <put name="body" value="/welcome.jsp"/>
</definition>    

次の定義により、マスター定義のmenu属性をオーバーライドし、一部のユーザーに対して別のメニュー・ファイルを含めることが可能です。

<definition name="admin" extends="master">
  <put name="menu" value="/adminmenu.jsp"/>
</definition>    

最後に、拡張の2つの使用方法を組み合せることにより、さらに別の定義により、拡張された定義の空白の属性に定義を提供できます。この拡張された定義の場合、titleおよびbody属性の値(マスター定義または拡張しているadmin定義のいずれによっても定義されていない)を提供できます。

<definition name="adminwelcome" extends="admin">
  <put name="title" value="Administration"/>
  <put name="body" value="/adminwelcome.jsp"/>
</definition>    

属性値として使用されるTiles定義

Tiles定義属性の値自体を、Tiles定義への参照として使用できます。このようにすると、Tiles定義の階層を作成できます。たとえば、次の定義を、3つの部分から構成されるtoptextヘッダーの作成に使用するとします。

<definition name="toptext" path="/top/toptext.jsp">
  <put name="company" value="/top/company.jsp"/>
  <put name="logo" value="/top/logo.jsp"/>
  <put name="appname" value="/top/appname.jsp"/>
</definition>    

マスター・レイアウト定義などの別の定義により、次のようにtoptext定義を参照できます。

<definition name="welcome" page="/layoutPage.jsp">
  ...
  <put name="header" value="toptext"/>
  ...
</definition>    

Tiles定義を使用したページ

表示ページでTiles定義を使用するには、Tilesタグ・ライブラリのTilesタグを使用します。JDeveloperでTilesのinsertタグを使用するには、「コンポーネント・パレット」および「Struts Tiles」ページを使用し、ページ上に「挿入」要素をドラッグできます。Strutsタグ・ライブラリの使用方法の詳細は、JDeveloperのStrutsカスタム・タグ・ライブラリについてを参照してください。

たとえば、次に示す、ページに含まれているTiles insertタグにより、Tiles定義ファイル内のTiles定義に関する前の項で示されている定義と同じ結果が得られます。

<html>
... <body> ... <tiles:definition id="welcome" page="/layoutPage.jsp"> <tiles:put name="header" value="toptext"/> </tiles:definition> ... </body>
</html>

TilesとJSPページについて
Tiles定義の使用

Tiles定義ファイルで使用される要素の詳細は、次を参照してください。

リファレンス: Tiles定義要素

JSPページで使用されるTilesタグの詳細は、次を参照してください。

リファレンス: Tilesタグ・ライブラリ

Tilesの詳細および使用方法は、Apacheのサイトの説明を参照してください。

http://struts.apache.org/api/org/apache/struts/tiles/package-summary.html#package_description

Tilesタグ・ライブラリのリファレンス情報は、次のサイトを参照してください。

http://struts.apache.org/userGuide/struts-tiles.html

Tilesのユーザー・ガイドは、次のサイトを参照してください。

http://struts.apache.org/userGuide/dev_tiles.html