Tiles入門及項目實戰

1.Apache Tiles™


  Apache Tiles是一個模板佈局框架。最初是爲了簡化Web應用界面開發,現在已不限於JavaEE Web環境。html

  Tiles容許開發人員定義頁面片斷,它們在運行時會組裝成一個完整的頁面。這些片斷,或者叫「瓷磚」(tiles本意即瓷磚),被其餘頁面引入以減小公共元素的重複定義,或者嵌入另外一個tiles以組成一系列可重用的模板。
web


2.關於複合視圖模式(Composite View Pattern)


Composite View Pattern

  很多網站都有這樣的特色:大部分頁面遵循着相同的結構和佈局。Composite View Pattern就是這種狀況的典型應用場景。請看下圖,兩個網頁有着類似的結構,只是body部分隨狀況改變,然而這確實須要繪製兩個頁面,這和使用frameset刷新其中一個子frame是不一樣的。spring


 


Composite View Pattern與Decorator pattern


  Tiles是一個Composite View框架,它容許在整個應用重用頁面片斷。另外一種能實現相同效果的辦法是使用Decorator pattern((頁面)裝飾模式),例如Sitemesh就是基於裝飾模式的。不一樣於Composite View建立模板並動態組裝頁面片斷,Decorator pattern利用一個HTML頁面添加各個(頁眉、頁腳、菜單...)部分以呈現界面。你能夠經過下表看到他們之間的使用差異:apache


哪些方面 Composite View Decorator
可重用性 頁面的不一樣部分(模板和片斷)可以在整個應用重用 每一個裝飾器都能被重用,可是同一時間裝飾器自己只能應用於一個頁面
配置簡便性 每一個頁面都必須顯式定義 裝飾器甚至可以應用於整個應用
運行時配置 頁面能在運行時配置、組裝 因爲頁面裝飾一次,沒有此特性
性能 組裝開銷很低 被裝飾的頁面必須被解析


3.幾個概念


  Tiles實現了複合視圖模式(Composite View Pattern),爲了實現這個模式Tiles添加了幾個本身的概念:Template(模板)、Attribute(屬性)、Definition(定義)。mvc


Template


  即頁面佈局,頁面的各個部分由Attribute填充。(Template能夠沒有Attribute)app

  舉個栗子,考慮下圖的經典風格佈局:框架

 

  一個模板(Template)頁面的代碼可能相似下面這樣:jsp

 

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<table>
  <tr>
    <td colspan="2">
      <tiles:insertAttribute name="header" />
    </td>
  </tr>
  <tr>
    <td>
      <tiles:insertAttribute name="menu" />
    </td>
    <td>
      <tiles:insertAttribute name="body" />
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <tiles:insertAttribute name="footer" />
    </td>
  </tr>
</table>

 

 

Attribute


 Attribute就是頁面上那些待填充的空白部分,它容許如下三種類型:maven

    ● string:頁面直接呈現的內容。佈局

    ● template:一個可能包含Attribute的模板,若是包含則必須填充Attribute以呈現頁面。

    ● definition:一個可重用的頁面部分,其中部分或所有的Attribute已被填充。


Definition


  Definition是最終要展示給用戶的部分,其實就是一個Attribute徹底或部分填充的Template。

    ● 若是Attribute已徹底填充,它就能夠展示給用戶。

    ● 若是還有還沒有填充的Attribute,這被稱做抽象定義(abstract definition),它能夠被其餘Definition繼承以實現佈局複用,或者也能夠在運行時填充這些Attribute。

  就拿上面的經典佈局風格舉個栗子(注意頁面中insertAttribute的name屬性與definition中put-attribute的name屬性的對應關係):

 

<definition name="myapp.homepage" template="/layouts/classic.jsp">
  <put-attribute name="header" value="/tiles/banner.jsp" />
  <put-attribute name="menu" value="/tiles/common_menu.jsp" />
  <put-attribute name="body" value="/tiles/home_body.jsp" />
  <put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>


 

4.在maven中添加Tiles依賴(以Tiles 3.0.5版本爲例)


  Tiles是一個Web應用包,曾經和Struts捆綁使用,現在已獨立出來,目前最經常使用的情形是基於servlet的web應用。

  你須要具有如下環境才能保證Tiles正常使用:JDK1.6或更高版本,Servlet2.5

  簡單起見,僅僅你的pom.xml加入如下內容就可使用Tiles的全部特性了(入門的話不須要再往下看配置了):

 

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


  若是你不打算使用全部特性,基本的僅支持servlet的依賴以下:

 

 

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-servlet</artifactId>
  <version>3.0.5</version>
</dependency>


  若是你還想加入JSP支持,繼續添加:

 

 

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-jsp</artifactId>
  <version>3.0.5</version>
</dependency>


 

5.SpringMVC集成Tiles


  Spring 3.2.x支持2.1.2及以上版本的Tiles,若是你使用Spring 4請集成Tiles 3.0.x及更高版本。


配置


配置TilesConfigurer以加載Tiles定義文件


  WebApplicationContext初始化時,下面的定義文件被加載而且定義工廠(DefinitionsFactory)被實例化。

 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<!-- Tiles2:<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> -->
    <property name="definitions">
        <list>
            <!-- <value>classpath:tiles/tiles-template.xml</value> -->
            <value>/WEB-INF/defs/general.xml</value>
            <value>/WEB-INF/defs/widgets.xml</value>
            <value>/WEB-INF/defs/administrator.xml</value>
            <value>/WEB-INF/defs/customer.xml</value>
            <value>/WEB-INF/defs/templates.xml</value>
        </list>
    </property>
</bean>


  至此已經能夠在Spring Web工程中做爲view使用了,和使用Spring的其它視圖技術同樣,咱們還須要一個視圖解析器(ViewResolver)。咱們可使用支持解析多種視圖的ResourceBundleViewResolver(參見:http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/view.html#view-tiles),簡單起見,咱們使用UrlBasedViewResolver:

 

 

<!-- 配置方式一(UrlBasedViewResolver將會實例化給定的viewClass) -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
    <!-- Tiles2:<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> -->
</bean>
<!-- 配置方式二 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
<!-- Tiles2:<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"> -->


若是打算使用Tiles的高級特性,看這裏!


  若是你打算使用Tiles的某些高級特性,像運行時構建視圖(Runtime Composition)、更復雜的通配符支持(Wildcard support)之類,啓用方式有兩種:

  方式一:springMVC集成Tiles3情形下很合適:

 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	<property name="definitions">
		<list>
			<value>/WEB-INF/config/tiles.xml</value>
			<value>/WEB-INF/config/tiles-adf.xml</value>
		</list>
	</property>
	
	<!-- Specify whether to apply Tiles 3.0's "complete-autoload" configuration. -->
	<property name="completeAutoload" value="true" />
</bean>


  方式二:在web.xml中配置監聽器:

 

 

<listener>
	<listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class>
</listener>


6.項目實戰


  SpringMVC整合Tiles3,基於Maven構建,Bootstarp作前臺頁面呈現儘管作的相對簡陋。菜單能夠切換兩種佈局方式(用繼承以及覆蓋解釋如何換湯不換藥),固然,還有點彩蛋 ==


  下面的項目實戰咱們也用到了通配符以簡化定義,在普通的springMVC集成Tiles工程裏通配符的使用可能相似下面這樣:

<definition name="tiles/*" extends="base.definition">
	<!-- {1}:通配符方式簡化定義 -->
	<put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/>
</definition>


  然而,當咱們用springMVC整合Tiles時在springMVC配置文件中啓用了complete-autoload致使通配符的使用方式須要作些改進(配置監聽器的方式不會出現此問題):

<definition name="WILDCARD:tiles/*" extends="base.definition">
	<!-- {1}:通配符方式簡化定義 -->
	<put-attribute name="content" value="/WEB-INF/views/{1}.jsp"/>
</definition>


還有點說明


  文章並無解釋Tiles的高級特性部分,可是部分應用已經體如今下面的項目中了,好比定義的繼承、Runtime Composition、通配符、EL支持...


下載地址:tiles3-springmvc.rar

相關文章
相關標籤/搜索