Apache Tiles 學習(三)、Apache Tiles的基本使用

一、概述

    對於一個新的技術,瞭解其基本的概念和和原理是學好該技術的基礎。 html

二、Tiles的概念

       Tiles 是複合視圖模式(Composite View pattern)的一個實現。Tiles將該模式添加到本身的概念中是該模式具體化。Tiles的實現是以複合式模式爲理論,   概念包括:Template,Attribute和Definition。視圖助手模式的實現是View Preparer 概念。 java

    接下來說解相關的概念:Template,Attribute,Definition和View Preparer。 web

2.一、模板:Template

    在Tiles中,模板(Template)是一個頁面的佈局部分。你能將一個頁面結構當作是由不一樣的須要填補空白組成。 spring

    例如,考慮這個「典型佈局」頁面結構。     apache


    你可以將該結構複製到一個新建的JSP頁面中,以下所示
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>

    注意:一個模板(Template)能夠沒有屬性(attributes),這種狀況下該模板能夠直接使用。有屬性的話就要先定義屬性才能使用,否則的話就會在解析jsp頁面的時候報錯。  webapp


2.二、屬性:Attribute

    屬性是模板中的空白,它在你的應用程序中被填充到模板中。屬性能夠是如下三種類型: jsp


  • string:屬性是string的話,會將string直接呈如今頁面。
  • template:屬性是一個模板(Template),有無屬性都行。若是有屬性的話,你也要將他們填充後再呈現頁面。
  • definition:它是一個可重複使用組成的頁面,包含全部的屬性來填充以呈現頁面。 


2.三、定義:definition

    定義是呈現給最終用戶的組合物;本質上,一個定義是由一個模板和徹底或部分填充的屬性組成的。說白了就是:一個定義是由一個模板和屬性組成的。 佈局


  • 若是全部的「屬性」都填充了,它將能夠呈現給最終用戶。
  • 若是不是全部的屬性都填充了,這個定義稱爲「抽象定義」(abastract definition),它能夠被用做「父定義」,讓其餘「定義」繼承,失去的「屬性」能在運行時填充。

    例如,你能夠按以前看過的「典型模板」建立建立一個頁面,修改Tiles的配置文件,以下:

<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>



2.四、視圖助手:View Preparer

    有時候一個定義在呈現以前須要「預處理」。例如,顯示一個menu時,menu的結構必須被建立而且已經保存在request範圍內。

    爲了達到「預處理 」,視圖助手將會被用到,視圖助手將在呈現定義以前被調用,所以在將「定義」呈現所需的東西都會被正確的「預處理 」。

三、建立和使用Tiles 頁面

    安裝tiles和學習了Tiles的一些概念後,是時候建立一些頁面了。如下你將學習到建立可重用的頁面和完整頁面的步驟。

3.一、建立一個模板 

    咱們使用「典型佈局」頁面結構:


    建立一個JSP頁面做爲這個佈局並將其保存在/layouts/classic.jsp文件中


<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<html>
  <head>
    <title><tiles:getAsString name="title"/></title>
  </head>
  <body>
        <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>
  </body>
</html>


        在這個模板中有5個屬性:title(string類型的屬性),header,menu,body和footer。

3.二、建立組成頁面

    在這個階段,你須要建立4個用於替換以前建立模板中的 header,menu,body和footer屬性的JSP頁面。

    你能夠放置任何你想放的東西在這個頁面中,他們僅僅是一個測試。

3.三、建立一個定義

    默認狀況,「定義」文件是/WEB-INF/tiles.xml。若是你使用的是CompleteAutoloadTilesListener,tiles將會使用webapp目錄下按/WEB-INF/tiles*.xml匹配或classpath下按/META-INF/tiles*.xml匹配的任何文件做爲「定義 」文件;若是發現多個,tiles將會合並這些文件到一塊兒。

    但如今,咱們使用默認狀況並建立/WEN-INF/tiles.xml文件,該文件下包含一個「定義」。

<?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="myapp.homepage" template="/layouts/classic.jsp">
    <put-attribute name="title" value="Tiles tutorial homepage" />
    <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>
</tiles-definitions>



3.四、渲染定義

    建立完定之後,你就能渲染它了。


  • 經過使用<tiles:insertDefinition />標籤,將定義插入一個JSP頁面。
    <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
    <tiles:insertDefinition name="myapp.homepage" />
  •  其餘狀況,你能夠直接使用response來渲染定義,經過使用Tiles 容器
    TilesContainer container = TilesAccess.getContainer(
            request.getSession().getServletContext());
    container.render("myapp.homepage", request, response);
  • 經過使用Tiles提供的Rendering Utilities。例如,若是你已經配置了TilesDispatchServlet,你能經過請求:http://example.com/webapp/myapp.homepage.tiles來渲染「定義」。
經過使用支持的框架(struts,spring等)來渲染「定義」。


    參考:

        官方文檔

            官方文檔

    【做者申明】轉載請註明原文地址,本文翻譯至Apache官方文檔。

相關文章
相關標籤/搜索