Apache Tiles的基本使用
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。
1、概述
?
????對(duì)于一個(gè)新的技術(shù),了解其基本的概念和和原理是學(xué)好該技術(shù)的基礎(chǔ)。
?
2、Tiles的概念
???????Tiles 是復(fù)合視圖模式(Composite View pattern)的一個(gè)實(shí)現(xiàn)。Tiles將該模式添加到自己的概念中是該模式具體化。Tiles的實(shí)現(xiàn)是以復(fù)合式模式為理論,? ?概念包括:Template,Attribute和Definition。視圖助手模式的實(shí)現(xiàn)是View Preparer 概念。
? ? 接下來講解相關(guān)的概念:Template,Attribute,Definition和View Preparer。
2.1、模板:Template
????在Tiles中,模板(Template)是一個(gè)頁(yè)面的布局部分。你能將一個(gè)頁(yè)面結(jié)構(gòu)看成是由不同的需要填補(bǔ)空白組成。
? ? 例如,考慮這個(gè)“典型布局”頁(yè)面結(jié)構(gòu)。? ??
? ? 你能夠?qū)⒃摻Y(jié)構(gòu)復(fù)制到一個(gè)新建的JSP頁(yè)面中,如下所示
? ? 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>注意:一個(gè)模板(Template)可以沒有屬性(attributes),這種情況下該模板可以直接使用。有屬性的話就要先定義屬性才能使用,不然的話就會(huì)在解析jsp頁(yè)面的時(shí)候報(bào)錯(cuò)。
2.2、屬性:Attribute
????屬性是模板中的空白,它在你的應(yīng)用程序中被填充到模板中。屬性可以是以下三種類型:
?
- string:屬性是string的話,會(huì)將string直接呈現(xiàn)在頁(yè)面。
- template:屬性是一個(gè)模板(Template),有無屬性都行。如果有屬性的話,你也要將他們填充后再呈現(xiàn)頁(yè)面。
- definition:它是一個(gè)可重復(fù)使用組成的頁(yè)面,包含所有的屬性來填充以呈現(xiàn)頁(yè)面。?
?
2.3、定義:definition
? ??定義是呈現(xiàn)給最終用戶的組合物;本質(zhì)上,一個(gè)定義是由一個(gè)模板和完全或部分填充的屬性組成的。說白了就是:一個(gè)定義是由一個(gè)模板和屬性組成的。
?
- 如果所有的“屬性”都填充了,它將可以呈現(xiàn)給最終用戶。
- 如果不是所有的屬性都填充了,這個(gè)定義稱為“抽象定義”(abastract definition),它可以被用作“父定義”,讓其他“定義”繼承,失去的“屬性”能在運(yùn)行時(shí)填充。
? ? 例如,你可以按之前看過的“典型模板”創(chuàng)建創(chuàng)建一個(gè)頁(yè)面,修改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.4、視圖助手:View Preparer
????有時(shí)候一個(gè)定義在呈現(xiàn)之前需要“預(yù)處理”。例如,顯示一個(gè)menu時(shí),menu的結(jié)構(gòu)必須被創(chuàng)建并且已經(jīng)保存在request范圍內(nèi)。
? ? 為了達(dá)到“預(yù)處理?”,視圖助手將會(huì)被用到,視圖助手將在呈現(xiàn)定義之前被調(diào)用,因此在將“定義”呈現(xiàn)所需的東西都會(huì)被正確的“預(yù)處理?”。
3、創(chuàng)建和使用Tiles 頁(yè)面
? ? 安裝tiles和學(xué)習(xí)了Tiles的一些概念后,是時(shí)候創(chuàng)建一些頁(yè)面了。以下你將學(xué)習(xí)到創(chuàng)建可重用的頁(yè)面和完整頁(yè)面的步驟。
3.1、創(chuàng)建一個(gè)模板?
? ? 我們使用“典型布局”頁(yè)面結(jié)構(gòu):
????創(chuàng)建一個(gè)JSP頁(yè)面作為這個(gè)布局并將其保存在/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>?
?
?
?
?
?
? ? ????在這個(gè)模板中有5個(gè)屬性:title(string類型的屬性),header,menu,body和footer。
3.2、創(chuàng)建組成頁(yè)面
? ??在這個(gè)階段,你需要?jiǎng)?chuàng)建4個(gè)用于替換之前創(chuàng)建模板中的?header,menu,body和footer屬性的JSP頁(yè)面。
? ? 你可以放置任何你想放的東西在這個(gè)頁(yè)面中,他們僅僅是一個(gè)測(cè)試。
3.3、創(chuàng)建一個(gè)定義
? ? 默認(rèn)情況,“定義”文件是/WEB-INF/tiles.xml。如果你使用的是CompleteAutoloadTilesListener,tiles將會(huì)使用webapp目錄下按/WEB-INF/tiles*.xml匹配或classpath下按/META-INF/tiles*.xml匹配的任何文件作為“定義?”文件;如果發(fā)現(xiàn)多個(gè),tiles將會(huì)合并這些文件到一起。
? ? 但現(xiàn)在,我們使用默認(rèn)情況并創(chuàng)建/WEN-INF/tiles.xml文件,該文件下包含一個(gè)“定義”。
?
?
<?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.4、渲染定義
? ??創(chuàng)建完定以后,你就能渲染它了。
?
- 通過使用<tiles:insertDefinition />標(biāo)簽,將定義插入一個(gè)JSP頁(yè)面。
- <%@ 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。例如,如果你已經(jīng)配置了TilesDispatchServlet,你能通過請(qǐng)求:http://example.com/webapp/myapp.homepage.tiles來渲染“定義”。
通過使用支持的框架(struts,spring等)來渲染“定義”。?
?
總結(jié)
以上是生活随笔為你收集整理的Apache Tiles的基本使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css中关于超链接
- 下一篇: HDU OJ 动态规划46题解析