howdylikes

Google Developersってわかりづらいよね

Apache Tiles3を使ってみる

メモです。ベースはSpring3です。

リファレンス : https://tiles.apache.org/framework/index.html

サンプルソース : https://github.com/howdy39/ApacheTiles3Sample

pom.xml

org.apache.tilesを追加

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.4</version>
</dependency>

web.xml

リスナー追加

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

mvc-config.xml

元々あったInternalResourceViewResolverにorderを追加しています。優先順位かな。

 <bean
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix" value="/WEB-INF/view/" />
     <property name="suffix" value=".jsp" />
     <property name="order" value="2" />
 </bean>

 <bean id="tilesViewResolver"
     class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
     <property name="order" value="1" />
 </bean>

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

tiles-definitions.xml

baseLayoutでベースを指定してsample1で各々の読み込ませたいメッセージやJSPを指定

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC 
 "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"  
 "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
    <!-- ベースのレイアウト -->
    <definition name="baseLayout" template="/WEB-INF/view/layout/layout.jsp">
        <put-attribute name="header" value="/WEB-INF/view/layout/header.jsp" />
        <put-attribute name="footer" value="/WEB-INF/view/layout/footer.jsp" />
    </definition>
    <definition name="sample1" extends="baseLayout">
        <put-attribute name="message" value="This is sample1 message" />
        <put-attribute name="content" value="/WEB-INF/view/sample1.jsp" />
    </definition>
</tiles-definitions>

layout.jsp

冒頭でtilesを読み込んでいます
tiles:insertAttributeでjspを読み込み
tiles:getAsStringで文字列を読み込み

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
    <div>
        <div class="body">
            <tiles:insertAttribute name="header" />
            <div class="body-content">
                <h2><tiles:getAsString name='message' /></h2>
                <tiles:insertAttribute name="content" />
            </div>
            <tiles:insertAttribute name="footer" />
        </div>
    </div>
</body>

</html>