m-namikiの日記

おもしろき こともなき世を おもしろく

SpringMVC3.2.1を利用してのWebアプリケーション #04

前回の続きです。前回はフォームを使って画面の入力情報の受け取りを行いました。今回はTiles3の適用を行います。

Tile3の適用

QuickstartではTiles3に対応していましたが、id:m-namiki:20130311で設定ファイルから削除してしまったので、今回改めて適用します。

servlet-context.xml

まず servlet-context.xml にTilesの定義ファイルのパスを記述します。

<bean id="tilesConfigurer"
	class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	<property name="definitions">
		<list>
			<value>/WEB-INF/tiles/tiles.xml</value>
		</list>
	</property>
</bean>

次に viewResolver を JstlView から TilesView に変更します。Quickstartでは tiles.xml の他に各機能ごとで view.xml を作成して、それもリストに追加していましたが、今回は取り敢えず一つだけにしておきます。

<bean id="viewResolver"
	class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	<property name="viewClass"
		value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>

servlet-context.xmlの変更は以上です。

tiles.xml

Tilesの定義ファイルを作成します。Quickstart付属のtiles.xmlに前回作成した Input を追加しました。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
	"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
	"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
	<definition name="default" template="/WEB-INF/tiles/template.jsp">
		<put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
		<put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
	</definition>
	
	<definition name="input/input" extends="default">
		<put-attribute name="title" value="Tutorial - Input - Input"></put-attribute>
		<put-attribute name="body" value="/WEB-INF/view/input/input.jsp"/>
	</definition>
	<definition name="input/result" extends="default">
		<put-attribute name="title" value="Tutorial - Input - Result"></put-attribute>
		<put-attribute name="body" value="/WEB-INF/view/input/result.jsp"/>
	</definition>
</tiles-definitions>

definition 要素の name 属性が Controller が返却する ViewName になります。ここは各ページが一意になる必要があるようです。
put-attribute 要素で各ページの title を指定するようにしました。template.jspで以下のようにしておくとページごとの title を指定可能です。

<title><tiles:getAsString name="title"/></title>

また、ここでは利用しませんでしたが、 put-list-attribute 要素を利用すると複数の attribute が可能となるようです。template.jsp では c:forEach でその値を利用できるみたいです。

以上でTiles3の適用は終了です。後は tiles.xml に定義した template.jsp や header.jsp、前回作成した input.jsp をちょこちょこっといじって以下のような画面になりました。