Apache Tiles的基本使用

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

1、概述

?

????對于一個新的技術,了解其基本的概念和和原理是學好該技術的基礎。

?

2、Tiles的概念

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

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

2.1、模板:Template

????在Tiles中,模板(Template)是一個頁面的布局部分。你能將一個頁面結構看成是由不同的需要填補空白組成。

? ? 例如,考慮這個“典型布局”頁面結構。? ??

? ? 你能夠將該結構復制到一個新建的JSP頁面中,如下所示

? ? 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頁面的時候報錯。

2.2、屬性:Attribute

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

?

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

?

2.3、定義: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.4、視圖助手:View Preparer

????有時候一個定義在呈現之前需要“預處理”。例如,顯示一個menu時,menu的結構必須被創建并且已經保存在request范圍內。

? ? 為了達到“預處理?”,視圖助手將會被用到,視圖助手將在呈現定義之前被調用,因此在將“定義”呈現所需的東西都會被正確的“預處理?”。

3、創建和使用Tiles 頁面

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

3.1、創建一個模板?

? ? 我們使用“典型布局”頁面結構:

????創建一個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.2、創建組成頁面

? ??在這個階段,你需要創建4個用于替換之前創建模板中的?header,menu,body和footer屬性的JSP頁面。

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

3.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.4、渲染定義

? ??創建完定以后,你就能渲染它了。

?

  • 通過使用<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等)來渲染“定義”。?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452069.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452069.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452069.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js--------1.時間

1 //獲取當前時間 yyyy-MM-dd2 function getNowFormatDate() {3 var date new Date();4 var seperator1 "-";5 var seperator2 ":";6 var month date.getMonth() 1;7 var strDate date.getDate();8 if (month > 1 &&…

網絡爬蟲--6.urllib庫的基本使用(2)

文章目錄一. urllib.parse.urlencode()和urllib.parse.unquote()二. Get方式三. 批量爬取百度貼吧數據四.POST方式五.關于CA六.處理HTTPS請求 SSL證書驗證一. urllib.parse.urlencode()和urllib.parse.unquote() 編碼工作使用urllib.parse的urlencode()函數&#xff0c;幫我們…

面向對象語言的技術特點

1.支持類與對象概念的機制 所有面向對象語言都允許用戶動態創建對象&#xff0c;并且可以用指針引用動態創建的對象。允許動態創建對象&#xff0c;就意味著系統必須處理內存管理問題&#xff0c;如果不及時釋放不再需要的對象所占用的內存&#xff0c;動態存儲分配就有可能耗…

INI 文件的操作

在程序中經常要用到設置或者其他少量數據的存盤&#xff0c;以便程序在下一次執行的時候可以使用&#xff0c;比如說保存本次程序執行時窗口的位置、大小、一些用戶設置的數據等等&#xff0c;在 Dos 下編程的時候&#xff0c;我們一般自己產生一個文件&#xff0c;由自己把這些…

摩拜大數據殺熟?官方:老用戶押金的確退款延遲

近日&#xff0c;有媒體曝出摩拜單車一些老用戶出現押金難退現象。有的消費者點擊退款后&#xff0c;系統不斷奔潰&#xff1b;有的申請退款后&#xff0c;賬戶又莫名出現押金&#xff0c;就像未申請一樣&#xff1b;也有人終于提交了退款&#xff0c;等候數日卻遲遲不見到賬。…

Junit Test使用樣例

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 配置&#xff1a; 調用類&#xff1a; import java.util.List;import javax.annotation.Resource;import org.apache.shiro.crypto.Rand…

Django congtent types應用

contenttypes 是Django內置的一個應用&#xff0c;可以追蹤項目中所有app和model的對應關系&#xff0c;并記錄在ContentType表中。 每當我們創建了新的model并執行數據庫遷移后&#xff0c;ContentType表中就會自動新增一條記錄。比如我在應用app01的models.py中創建表class E…

網絡爬蟲--7.Handler處理器 和 自定義Opener

文章目錄一. 引言二. 簡單的自定義opener()三. ProxyHandler處理器&#xff08;代理設置&#xff09;四. Cookie1.Cookie原理2.Cookie應用五. cookiejar庫 和 HTTPCookieProcessor處理器1.案例一:獲取Cookie&#xff0c;并保存到CookieJar()對象中2.案例二&#xff1a;利用cook…

如何選擇面向對象語言

開發人員在選擇面向對象語言時&#xff0c;還應該著重考慮以下一些實際因素。 1. 將來能否占主導地位 為了使自己的產品在若干年后仍然具有很強的生命力&#xff0c;人們可能希望采用將來占主導地位的語言編程。 根據目前占有的市場份額&#xff0c;以及專業書刊和學術會議上所…

Unicode編碼及其實現:UTF-16、UTF-8,and more

本文主要討論Unicode的編碼與各種實現&#xff0c;著重討論UTF-16&#xff0c;UTF-8的實現規則&#xff0c;以及Big-endian和Little-Endian的存儲規則。 一、Unicode編碼 Unicode出現之前已經有各種編碼標準&#xff1a;ANSI、ISO8859-1、GB2312、GBK以及BIG-5等。Unicode試圖統…

Apache Tiles的使用 前配置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 使用方法見&#xff1a; http://blog.csdn.net/jiangyu1013/article/details/53161580 1.加maven 依賴&#xff1a; <!-- 頁面布局…

day212223:線程、進程、協程

1、程序工作原理 進程的限制&#xff1a;每一個時刻只能有一個線程來工作。多進程的優點&#xff1a;同時利用多個cpu&#xff0c;能夠同時進行多個操作。缺點&#xff1a;對內存消耗比較高當進程數多于cpu數量的時候會導致不能被調用&#xff0c;進程不是越多越好&#xff0c;…

php課程 8-28 php如何繪制生成顯示圖片

php課程 8-28 php如何繪制生成顯示圖片 一、總結 一句話總結&#xff1a;gd庫輕松解決 1、php圖片操作生成的圖的兩種去向是什么&#xff1f; 一種在頁面直接輸出&#xff0c;一種存進本地磁盤 2、php操作圖片的庫有哪些&#xff1f; PHP: Image Processing and Generation - M…

代碼行技術

用代碼行技術估算軟件規模時&#xff0c;當程序較小時常用的單位是代碼行數&#xff08;LOC&#xff09;&#xff0c;當程序較大時常用的單位是千行代碼數&#xff08;KLOC&#xff09;。 代碼行技術的主要優點是&#xff0c;代碼是所有軟件開發項目都有的“產品”&#xff0c;…

網絡爬蟲--8.編碼趣聞

很久很久以前&#xff0c;有一群人&#xff0c;他們決定用8個可以開合的晶體管來組合成不同的狀態&#xff0c;以表示世界上的萬物。他們看到8個開關狀態是好的&#xff0c;于是他們把這稱為"字節"。 再后來&#xff0c;他們又做了一些可以處理這些字節的機器&#…

科技領域的一分鐘

各位果迷是否能想象在一分鐘之內&#xff0c;科技領域都會發生什么事情&#xff1f;——蘋果平均每分鐘賣出81部 iPad&#xff1b;在 iPhone 4S 發布后的第一個周末&#xff0c;每分鐘賣出925部 iPhone 4S&#xff1b;RIM每分鐘賣出103臺黑莓手機&#xff1b;Amazon每分鐘賣出1…

flavr—超級漂亮的jQuery扁平彈出對話框

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 插件描述&#xff1a;flavr是一個時尚的扁平彈出對話框為您的下一個網站。 flavr是響應設計布局&#xff0c;能夠適應任何屏幕大小。 得…

經緯度之間的距離計算

來自谷歌地圖的計算公式&#xff1a; 通過JAVA的Math類各種方法調用。實現上述公式 private static double EARTH_RADIUS 6378.137;// 單位千米/*** 角度弧度計算公式 rad:(). <br/>* * 360度2π πMath.PI* * x度 x*π/360 弧度* * author chiwei* param d* return* s…

在CentOS7阿里云服務器部署ThinkPHP5,并配置phpstrom實現同步開發(微信小程序及管理員后端)...

小程序和后端同步開發 1.服務器安裝tp5框架&#xff1a; 方法很多比如&#xff1a;github、linux命令直接手動下、composer 都可以&#xff0c;方法很多&#xff0c;百度一下&#xff0c;不再累述 2.這時你會發現怎么都訪問出現不了這個令人舒心的界面&#xff08;ok第一個坑到…

ER圖( 實體聯系圖)

E-R圖也稱實體-聯系圖(Entity Relationship Diagram)&#xff0c;提供了表示實體類型、屬性和聯系的方法&#xff0c;用來描述現實世界的概念模型。 它是描述現實世界概念結構模型的有效方法。是表示概念模型的一種方式&#xff0c;用矩形表示實體型&#xff0c;矩形框內寫明…