熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

教你如何精通Struts:Tiles框架

2013-11-23 20:36:22  來源: Java開源技術 

  Tiles框架特性和內容

  Tiles框架為創建Web頁面提供了一種模板機制它能將網頁的布局和內容分離它允許先創建模板然後在運行時動態地將內容插入到模板中Tiles 框架建立在JSP的include指令的基礎上但它提供了比JSP的 include指令更強大的功能Tiles框架具有如下特性

  ◆創建可重用的模板

  ◆動態構建和裝載頁面

  ◆定義可重用的Tiles組件

  ◆支持國際化

  Tiles框架包含以下內容

  ◆Tiles標簽庫

  ◆Tiles組件的配置文件

  ◆TilesPlugIn插件

  在開發Web站點時常常要求同一站點的所有Web頁面保持一致的外觀比如有相同的布局頁頭頁尾和菜單

  采用基本的JSP語句創建復合式網頁

  創建動態Web頁面的最基本的辦法是為每個頁面創建獨立的JSP文件如果網頁的相同部分發生需求變更必須手工修改所有的JSP文件可見采用基本的JSP語句來編寫上述網頁會導致JSP代碼的大量冗余增加開發與維護成本

  采用JSP的include指令創建復合式網頁

  為了減少代碼的冗余可以把indexjsp和productjsp中相同部分放在單獨的JSP文件中然後在indexjsp和 productjsp文件中通過JSP include指令把其他JSP文件包含進來這樣提高了代碼的可重用性但是JSP include指令不能完全避免代碼冗余盡管這種方案減少了重復代碼但JSP文件的數量增加了由原來的個文件增加到個文件所以軟件的復雜度也增加了

  采用Tiles:Insert標簽創建復合式網頁

  Tiles標簽庫的tiles:insert標簽和JSP include指令具有相同的功能也能把其他的JSP頁面插入到當前頁面中用tiles:insert標簽取代JSP include指令來創建復合式頁面代碼僅有稍微的差別兩者的利弊也很相似單純使用tiles:insert標簽來創建復合式頁面還沒有充分發揮 Tiles框架的優勢

  以下兩條語句的作用是相同的

  

  < ?xml:namespace prefix = jsp />< jsp:include page=indexContentjsp>< /jsp:include>

  < ?xml:namespace prefix = tiles />< tiles:insert page=indexContentjsp>< /tiles:insert>

  采用Tiles模板創建復合式網頁

  盡管使用了tiles:insert標簽indexjsp和productjsp文件還是存在很多的重復代碼為了提高Web頁面的可重用性和可維護性可以引入Tiles的模板機制通俗的講Tiles模板是一種描述頁面布局的JSP頁面Tiles模板僅僅定義Web頁面的樣式而不指定內容在Web應用運行時才把特定內容插入到模板頁面中同一模板可以被多個Web頁面共用使用模板可以輕松的實現Web應用的所有頁面保持相同的外觀和布局無需為每個頁面硬編碼在一個應用中大多數頁面使用同一模板某些頁面可能需要不同的外觀使用其他的模板因此一個應用可能有一個以上模板

  

  < %@ taglib uri=/WEBINF/strutstilestld prefix=tiles%>

  < tiles:insert attribute=sidebar>< /tiles:insert>

  < tiles:insert attribute=header>< /tiles:insert>

  < tiles:insert attribute=content>< /tiles:insert>

  < tiles:insert attribute=footer>< /tiles:insert>

  < %@ page contentType=text/html; charset=UTF %>

  < %@ taglib uri=/WEBINF/strutstilestld prefix=tiles %>

  < tiles:insert page=layoutjsp flush=true>

  < tiles:put value=sidebarjsp name=sidebar>< /tiles:put>

  < tiles:put value=headerjsp name=header >< /tiles:put> 

  < tiles:put value=indexContentjsp name=content>< /tiles:put> 

  < tiles:put value=footerjsp name=footer >< /tiles:put> 

  < /tiles:insert>

  采用Tiles模板機制大大提高了代碼的可重用性和可維護性模板中包含了網頁共同的布局如果布局發生變化只需要修改模板文件無需修改具體的網頁文件不過從例程可以看出盡管 indexjsp和productjsp文件的長度都縮短了但是兩者還是存在重復代碼

  Tiles組件的基本使用方法

  為了最大程度的提高代碼的可重用性和靈活性Tiles框架引入了Tiles組件的概念Tiles組件可以代表一個完整的網頁也可以代表網頁的一部分簡單的Tiles組件可以組合成復雜的Tiles組件或被擴展為復雜的Tiles組件

  Tiles框架允許在專門的XML文件中配置Tiles組件例如以下代碼定義了一個名為indexdefinition的Tiles組件它描述整個indexjsp網頁

  

  < TILESDEFINITIONS>

  < DEFINITION name=indexdefinition path=/layoutjsp>

  < put value=sidebarjsp name=sidebar>< /put>

  < put value=headerjsp name=header>< /put> 

  < put value=indexContentjsp name=content>< /put> 

  < put value=footerjsp name=footer >< /put> 

  < /DEFINITION>

  < /TILESDEFINITIONS>

  definition元素的name屬性指定Tiles組件的名字path屬性指定Tiles組件使用的模板definition元素的put子元素用於向模板中插入具體的網頁內容

  例程 tilesdefsxml

  

  < ?xml version= encoding=ISO ?>

  config__dtd>

  < TILESDEFINITIONS>

  < DEFINITION name=indexdefinition path=/layoutjsp>

  <:put value=sidebarjsp name=sidebar>< /put>

  <:put value=headerjsp name=header>< /put> 

  <:put value=indexContentjsp name=content>< /put> 

  <:put value=footerjsp name=footer>< /put> 

  < /DEFINITION>

  < DEFINITION name=productdefinition path=/layoutjsp>

  < put value=sidebarjsp name=sidebar>< /put>

  < put value=headerjsp name=header >< /put> 

  < put value=productContentjsp name=content>< /put> 

  < put value=footerjsp name=footer >< /put> 

  < /DEFINITION>

  < /TILESDEFINITIONS>

  以上代碼定義了兩個Tiles組件它們分別代表完整的indexjsp和productjsp頁面

  ()在Strut配置文件中配置TilesPlugin插件代碼如下

  

  < PLUGIN className=orgapachestrutstilesTilesPlugin>

  < SETPROPERTY value=/WEBINF/tilesdefsxml property=definitionsconfig />

  < SETPROPERTY value=true property=definitionsparservalidate />

  < /PLUGIN>

  TilesPlugin插件用於加載Tiles組件的配置文件在plugin元素中包含幾個setproperty子元素用於向TilesPlugin插件傳入附加的參數

  ◆definitionsconfig參數指定Tiles組件的配置文件如果有多個配置文件則它們之間用逗號分隔

  ◆definitionsparservalidate參數指定XML解析器是否驗證Tiles配置文件可選值包括true和false默認值為true

  ()在webxml文件中配置ActionServlet

  為了保證在Web應用啟動時加載TilesPlugin插件應該加入ActionServlet控制器ActionServlet控制器在初始化時能加載所有的插件以下是在webxml文件中配置ActionServlet的代碼

  

  < SERVLET>

  < SERVLETNAME>action< /SERVLETNAME>

  < SERVLETCLASS>orgapachestrutsactionActionServlet< /SERVLETCLASS>

  < INITPARAM>

  < PARAMNAME>config< /PARAMNAME>

  < PARAMVALUE>/WEBINF/strutsconfigxml< /PARAMVALUE>

  < /INITPARAM>

  < LOADONSTARTUP>< /LOADONSTARTUP>

  < /SERVLET>

  < SERVLETMAPPING>

  < SERVLETNAME>action< /SERVLETNAME>

  < URLPATTERN>*do< /URLPATTERN>

  < /SERVLETMAPPING>

  ()在indexjsp和productjsp中插入Tiles組件參見例程和例程

  例程 indexjsp

  

  < %@ page contentType=text/html; charset=UTF %>

  < %@ taglib uri=/WEBINF/strutstilestld prefix=tiles %>

  < tiles:insert definition=indexdefinition>< /tiles:insert>

  例程  productjsp

  < CCID_NOBR>

  

  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">

  

  

  < CCID_CODE> < %@ page contentType="text/html; charset=UTF-8" %>

  < %@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

  < tiles:insert definition="product-definition">< /tiles:insert>

  通過Struts Action來調用Tiles組件

  如果Tiles組件代表完整的網頁,可以直接通過Struts Action來調用Tiles組件。tW.wInGWiT.Com例如,如果希望通過Struts Action來調用16.5.1節定義的名為"index-definition"的Tiles組件,可以在Struts配置文件中配置如下Action 映射:

  

  < ACTION-MAPPINGS>

  < ACTION path="/index" P <>

  type="org.apache.struts.actions.ForwardAction"

  parameter="index-definition">

  < /ACTION>

  < /ACTION-MAPPINGS>

  接下來通過浏覽器訪問 ,該請求先被轉發到ForwardAction, ForwardAction再把請求轉發給名為"index-definition"的Tiles組件,最後在浏覽器端,用戶將看到和index.jsp 相同的頁面。

  通過Struts Action來調用Tiles組件,可以充分發揮Struts框架負責流程控制的功能。此外,可以減少JSP文件的數目。例如,如果直接通過Struts Action來調用名為"index-definition"的Tiles組件,就不必再創建index.jsp文件。

  解析Tiles組件的組合與擴展

  Tiles 組件是一種可重用的組件。可以象搭積木一樣,把簡單的Tiles組件組裝成復雜的Tiles組件,例如,可以把名為"index-definition" 的Tiles組件的左邊部分拆分為獨立的Tiles組件,名為"sidebar-definition"。

  

  < DEFINITION name="index-definition" path="/layout.jsp">

  < put value="sidebar-definition" name="sidebar" type="definition">< /put>

  ……

  < /DEFINITION>

  以上put子元素的value屬性指定被包含的Tiles組件的名字,type屬性設為"definition",表示value屬性指定的是Tiles組件,而不是JSP文件。

  

  < DEFINITION name="index-definition" extends="base-definition">


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28738.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.