★Struts2でのtiles設定★

1.必要ライブラリの追加(WEB-INF/lib以下にコピー)
※xには適当なversion数値が入る

struts2-tiles-plugin-2.x.x.jar
tiles-api-2.x.x.jar
tiles-core-2.x.x.jar
tiles-jsp-2.x.x.jar
commons-beanutils-x.x.x-BETA.jar
commons-collections-x.x.jar
commons-digester-x.x.jar


2.web.xmlの設定
下記内容を追記
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>


3.struts.xmlの設定
下記内容を追記。struts.xmlが存在しない場合はsrc下に作成。
※<struts>タグ内に記述すること。

<package namespace="/" name="mydefault" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
</package>


4.tiles.xmlをWEB-INF以下に新規作成

※jspなどは環境に合わせて変更すること。
また、main部が機能毎にページが変わり、それ以外(メニュー、ヘッダ、フッタ)は固定になるレイアウトとする。

<?xml version="1.0" encoding="UTF-8" ?>

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

<tiles-definitions>
<definition name="layout.base" template="/pages/tiles/xxxLayout.jsp">
<put-attribute name="title" value="default title" />
<put-attribute name="head" value="/pages/tiles/head.jsp" />
<put-attribute name="menu" value="/pages/tiles/menu.jsp" />
<put-attribute name="main" type="string"><![CDATA[override]]></put-attribute>
<put-attribute name="foot" value="/pages/tiles/foot.jsp" />
</definition>
</tiles-definitions>


5.レイアウト定義用JSPファイル(上記例ではxxxLayout.jsp)の用意
※同フォルダに保存しているので参照のこと。

気にするポイントとしては
<%@ taglib uri="http://tiles.apache.org/tags-tiles " prefix="tiles" %>
を記述すること、またtiles定義の呼び方は
<tiles:insertAttribute name="head" />
<tiles:insertAttribute name="menu" />
<tiles:insertAttribute name="main" />
になる点。

例えば、「head」であれば、上記tiles.xmlで/pages/tiles/head.jspが呼ばれる。

また、「main」部については(後述するが)jspファイル内で定義する。

さらに、「title」部については、そのページのtitleを定義する。
(HTMLの<title>タグに入る文字が入る)
各JSPで特に指定しなかった場合、tiles.xmlに定義されている"default title"が表示される。


※補足
ファイルをそのままコピーしただけでは「http://tiles.apache.org/tags-tiles 」の部分で
エラー(そんなものない!と怒られる)が出るかもしれないが、
その場合は"http://tiles.apache.org/tags-tiles "の「"」を付け直して保存するなどすれば戻る。
それでも元に戻らない時はeclipseの「メニュー」→「プロジェクト設定」から
「Javaのビルド・パス:ライブラリー(L)」にWEB-INF/lib以下にコピーした各jarを追加した上で上記保存しなおしを実行
(読み込みなおしをさせるとうまくいくみたい)


6.jspの記述
jsp内で先ほど定義したtilesレイアウトをextendsする。

この方法により、1画面毎にtiles.xmlで定義しないといけなかったものが、jspのみでOKになる。
(xmlで定義していたものをjspで定義させることにより修正ポイント(ファイル数)を減らせる)


◆main.jspの骨組◆
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles " prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<tiles:insertDefinition name="layout.base">
<tiles:putAttribute name="title">ページ詳細(<s:property value="%{page.PAGE_DETAIL}" />)</tiles:putAttribute>
<tiles:putAttribute name="main">

<!-- mainにあたるHTML要素 -->

</tiles:putAttribute>
</tiles:insertDefinition>

※titleについて、上記にあるとおりsタグによる動的表示が可能!


7.Actionでは対象jspを呼び出し(例:Action内:アノテーションで/pages/main.jspを呼ぶ)
※同フォルダに「indexAction.java」を保存しているので参照のこと。

@Results({
@Result(value="/pages/main.jsp")
})

//※import org.apache.struts2.views.tiles.TilesResult;を忘れずに!


8.あとは実行あるのみ!







harupapa