レイアウト(テンプレート)を作ろう。

Tileを組み合わせてこんな感じのレイアウトを作ります。 レイアウトができてしまえば、後はbody.jspを入れ換えるだけで新しいページが簡単に作成できます! そこがTilesのポイント → 繰り返し表示される部分(ヘッダー・メニュー・フッター)は一度きり。 しかも変更も一ヶ所きり。

  • レイアウト: classicLayout.jsp
  • Tile: header.jsp, menu.jsp, body.jsp, footer.jsp

Tilesパッケージをダウンロードすると、classicLayout.jspファイルはついてきます。 が、全て"table"でレイアウトされているので私はCSSを使うように変更しました。


<%@ include file="/WEB-INF/taglibs.jsp" %>
→本来なら <%@ taglib uri="/WEB-INF/tld/tiles.tld" prefix="tiles" %> と書くのですが、
前にも書いたように、私は全てのタグライブラリを1つのファイルにまとめています。

<%@ page contentType="text/html; charset=EUC-JP"%>
→このラインは文字化けなしで日本語を表示させるために、すべてのページに必要です。

<html:html>
<head>
<html:base/>
<title><tiles:getAsString name="title" /></title>
<link rel="stylesheet" type="text/css" href="<html:rewrite forward='baseCss'/>" />
Strutsのglobal forwardにCSSファイルを設定しています。

<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"
</head>
<body>
<div id="head">
<tiles:insert attribute="header" />
</div>
<div id="menu">
<tiles:insert attribute="menu" />
</div>
<div id="container">
<tiles:insert attribute="body" />
</div>
<div id="foot">
<tiles:insert attribute="footer" />
</div>
</body>
</html:html>

の部分はtiles-defs.xmlファイルのtitleのバリューがStringとして置き換わります。このように、同じレイアウトでもタイトル部分だけの変更が可能です。
の部分に各Tileがはいります。
上のレイアウトにタイルをいれます。
tiles-defs.xml

<?xml version="1.0" encoding="EUC-JP" ?>

<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

<tiles-definitions>
<definition name="layout.MainLayout" path="/WEB-INF/tiles/layouts/classicLayout.jsp">
→nameは何でもかまいませんが、名前からどんなdefinitionか想像がつくくらいが良いでしょう。
pathは上のレイアウトのパスです。

<put name="title" value="izuLog" />
<put name="header" value="/WEB-INF/tiles/header.jsp" />
<put name="menu" value="/WEB-INF/tiles/menu.jsp" />
<put name="footer" value="/WEB-INF/tiles/footer.jsp" />
<put name="body" value="/WEB-INF/tiles/body.jsp" />
</definition>
...

</tiles-definitions>

tiles-defs.xmlファイルは通常/WEB-INF/以下におかれます。 私は複数のdefinitionファイルがあるため/WEB-INF/definition/に置いています。