隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2009年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1974492
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          Struts1.x系列教程(23):使用Tiles模板進行布局

          本文為原創,如需轉載,請注明作者和出處,謝謝!


          上一篇:Struts1.x系列教程(22):Tiles框架簡介

              Tiles提供的模板機制可以最大限度地避免重復編寫代碼。實際上,Tiles模板就是的JSP頁面,只是在這種JSP頁面中使用Tiles標簽代替確定不了的內容(相當于占位符),也就是需要在開發人員使用模板時來確定的內容。除了這一點,Tiles模板頁面和普通的JSP頁面完全相同。

          一般的模板頁面可以有如下兩種占位符:

          1.        字符串:使用<tiles:getAsString>標簽進行占位。如<tiles:getAsString name = "title" />。

          2.        Web資源(包括JSPServlet、HTML等):使用<tiles:insert>標簽來占位,如<tiles:insert attribute="header" />

          下面我們來看一下如何編寫一個Tiles模板。在Web根目錄中建立一個layout.jsp文件,代碼如下:

            <%@ page pageEncoding="GBK"%>
            
          <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
            
          <html>
                
          <head>
                    
          <title><tiles:getAsString name="title" /></title>
                
          </head>
                
          <body>
                    
          <table border=<tiles:getAsString name="border" />>
                        
          <tr>
                            
          <td>
                                
          <tiles:insert attribute="header" />
                            
          </td>
                        
          </tr>
                        
          <tr>
                            
          <td>
                                
          <tiles:insert attribute="body" />
                            
          </td>
                        
          </tr>
                        
          <tr>
                            
          <td>
                                
          <tiles:insert attribute="footer" />
                            
          </td>
                        
          </tr>
                    
          </table>
                
          </body>
            
          </html>

          從上例可以看出有五處占位符,這些內容將由開發人員在使用layout.jsp模板時指定。在編寫完上述模板后,在Web根目錄中建立三個在模板中使用的JSP文件,代碼如下:

          header.jsp

          <%@ page pageEncoding="GBK"%>
          這是一個頁頭

          body.jsp

          <%@ page pageEncoding="GBK"%>
          這是一個頁體


          footer.jsp

          <%@ page pageEncoding="GBK"%>
          這是一個頁尾


              下面我們來使用這個模板。在Web根目錄中建立一個mypage.jsp文件,代碼如下:

            <%@ page contentType="text/html; charset=GBK"%>
            
          <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
            
          <tiles:insert page="layout.jsp">
                
          <tiles:put name="title" value="我的頁面" />
                
          <tiles:put name="border" value="${param.border}"/>
                
          <tiles:put name="header" value="header.jsp"/>
                
          <tiles:put name="body" value="body.jsp"/>
                
          <tiles:put name="footer" value="footer.jsp"/>
            
          </tiles:insert>

               從mypage.jsp頁面中可以看出,在<tiles:insert>標 簽中通過page屬性插入了layout.jsp頁面(也就是Tiles模板),并且在<tiles:insert>標簽中使用了< tiles:put>子標簽為layout.jsp頁面中的占位標簽指定參數值。如果是<tiles:getAsString>標簽, 就會將<tiles:put>標簽中的value屬性值解釋為字符串;如果是<tiles:insert>標簽,就會將< tiles:put>標簽中的value屬性值解釋為Web資源。大家可以看到,如果有多個使用layout.jsp模板的JSP頁面,都可以按著 mypage.jsp頁面的方式使用這個layout.jsp模板,而無須再重復編寫象table這樣的HTML元素。
               在啟動Tomcat后,我們可以使用如下兩個URL來測試程序:

          http://localhost:8080/samples/mypage.jsp?border=1

          http://localhost:8080/samples/mypage.jsp?border=0

          注意:由于<tiles:insert><jsp:include>標簽類似,被插入或包含的Web資源都無法改面當前頁面的字符集編碼,因此,在使用Tiles模板時,即使在當前頁沒有使用中文,也應該使用page指令設置相應的字符集編碼。如果沒有設置,當模板頁面中有中文字符時,即使模板頁面使用了正確的字符集編碼,在當前頁面仍然無法正常顯示中文字符。
             
          上面曾講過,Tiles框架的目的就是最大限度地避免重復編寫代碼。而上面的例子雖然已經基本上避免了重復編碼的工作,但仍然可能會存在一些重復的代碼。如在mypage.jsp頁面中的<tiles:put>標簽。如果有很多頁面都需要插件頁頭、頁尾,那么就會有很多插入相同頁面的<tiles:put>標簽被分布在不同的JSP頁面中。因此,Tiles框架又提供了一個定義文件,來定義些重復使用的Tiles標簽。在使用定義文件之前,需要首先安裝Tiles插件(如果不使用定義文件,是不需要安裝Tiles插件的)。
              下面我們來將上面的部分代碼放到定義文件中。在WEB-INF目錄中建立一個tiles-defs.xml文件,代碼如下:

            <?xml version="1.0" encoding="GBK" ?>  
            
          <!DOCTYPE tiles-definitions PUBLIC
                   "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
                   "http://struts.apache.org/dtds/tiles-config_1_1.dtd"
          >
            
          <tiles-definitions>
                
          <definition name="myLayout" path="/layout.jsp">
                    
          <put name="title" value="我的頁面" />
                    
          <put name="header" value="header.jsp" />
                    
          <put name="body" value="body.jsp" />
                    
          <put name="footer" value="footer.jsp" />
                
          </definition>
            
          </tiles-definitions> 

           在上面的代碼中定義了一個<definition>元素。并且使用< put>元素對四個屬性:title、header、body和footer賦值。因此,如果使用這個定義文件,就可以無需使用< tiles:put>標簽再賦一遍值了。在Web根目錄中建立一個newpage.jsp文件,代碼如下:

            <%@ page contentType="text/html; charset=GBK"%>
            
          <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
            
          <tiles:insert definition="myLayout">
                
          <tiles:put name="border" value="${param.border}"/>
            
          </tiles:insert>

               newpage.jsp頁面的功能和mypage.jsp頁面完全一樣,只是代碼要簡單 得多。由于只有border屬性需要設置,因此,在newpage.jsp頁面中只要設置這一個屬性即可。而在<tiles:insert> 標簽中使用了definition屬性指定了“myLayout”。這個值就是在tiles-defs.xml中<definition>元 素的name屬性值。
               在啟動Tomcat后,我們可以使用如下的URL來測試newpage.jsp:

          http://localhost:8080/samples/newpage.jsp?border=1


              為了更好的復用,在定義文件中的<definition>元素也可以繼承其他的<definition>,如我們可以在tiles-defs.xml文件中加一個<definition>元素,來繼承myLayout,代碼如下:

          <definition name="myLayout.newLayout" extends="myLayout">
               <put name="title" value="新的頁面" />
          </definition>

              上面的代碼覆蓋了myLayout中的title屬性,其他的屬性值都繼承了myLayout中相應的屬性值。其中name屬性的值中的“.”是為了表明這個新的<definition>元素是從myLayout繼承的,沒有特殊的含義。

          下一篇:
          Struts1.x系列教程(24):配置文件總結





          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2009-02-27 17:06 銀河使者 閱讀(3666) 評論(3)  編輯  收藏 所屬分類: java 、web 、 原創 、struts1.x

          評論

          # re: Struts1.x系列教程(23):使用Tiles模板進行布局  回復  更多評論   

          我有點疑問,就是在 mypage.jsp中的web資源中,我要是插入.xx.do時它就出現異常,如
          <tiles:insert page="layout.jsp">
          <tiles:put name="footer" value="head.do"/>
          <tiles:put name="footer" value="footer.do"/>
          </tiles:insert>

          Web資源(包括JSP、Servlet、HTML等):怎樣將多個action包含進模版呢? 希望您能給個回復,我研究了老半天也搞不出來。
          82055185@qq.com

          2009-05-17 08:11 | 龍華城

          # re: Struts1.x系列教程(23):使用Tiles模板進行布局  回復  更多評論   

          出現什么異常,請說清楚一些
          2009-05-17 09:18 | 銀河使者

          # re: Struts1.x系列教程(23):使用Tiles模板進行布局  回復  更多評論   

          我出現了一個問題,
          一個頁面中有兩個tiles標簽,其中一個tiles標簽頁面中有一個<html:form action="/index">,然后這個整體頁面使用reset(ActionMapping mapping, HttpServletRequest request)方法,頁面對后臺的訪問會出現兩次
          2009-11-30 08:32 | rhythm1988@hotmail.com
          主站蜘蛛池模板: 庆云县| 泰来县| 清水县| 隆回县| 高碑店市| 陵川县| 雷波县| 福安市| 乐山市| 乌什县| 满洲里市| 东港市| 宜丰县| 治县。| 平和县| 上饶县| 连云港市| 鹤岗市| 古浪县| 宜君县| 柳州市| 五河县| 乌鲁木齐市| 景泰县| 萨迦县| 开化县| 佛坪县| 定远县| 康马县| 绥化市| 靖西县| 涿鹿县| 清丰县| 文山县| 河北区| 图片| 繁昌县| 新泰市| 天峨县| 紫金县| 广汉市|