對於一個新的技術,瞭解其基本的概念和和原理是學好該技術的基礎。 html
Tiles 是複合視圖模式(Composite View pattern)的一個實現。Tiles將該模式添加到本身的概念中是該模式具體化。Tiles的實現是以複合式模式爲理論, 概念包括:Template,Attribute和Definition。視圖助手模式的實現是View Preparer 概念。 java
接下來說解相關的概念:Template,Attribute,Definition和View Preparer。 web
在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
屬性是模板中的空白,它在你的應用程序中被填充到模板中。屬性能夠是如下三種類型: jsp
定義是呈現給最終用戶的組合物;本質上,一個定義是由一個模板和徹底或部分填充的屬性組成的。說白了就是:一個定義是由一個模板和屬性組成的。 佈局
例如,你能夠按以前看過的「典型模板」建立建立一個頁面,修改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的一些概念後,是時候建立一些頁面了。如下你將學習到建立可重用的頁面和完整頁面的步驟。
咱們使用「典型佈局」頁面結構:
建立一個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。
在這個階段,你須要建立4個用於替換以前建立模板中的 header,menu,body和footer屬性的JSP頁面。
你能夠放置任何你想放的東西在這個頁面中,他們僅僅是一個測試。
默認狀況,「定義」文件是/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>
建立完定之後,你就能渲染它了。
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <tiles:insertDefinition name="myapp.homepage" />
TilesContainer container = TilesAccess.getContainer( request.getSession().getServletContext()); container.render("myapp.homepage", request, response);
參考:
【做者申明】轉載請註明原文地址,本文翻譯至Apache官方文檔。