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>
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 をちょこちょこっといじって以下のような画面になりました。