Tiles是Struts中提供的一個優秀的模板技術,在JSF中,默認并沒有提供這樣的模板技術,但是,我們可以很容易的集成Struts中提供的Tiles到JSF中,現在,Tiles從Struts中獨立出來了,我們也可以在JSF中使用Shale中提供的Standalone Tiles。 首先以集成Struts中的Tiles為例,簡單概述一下步驟,最后我們在這個步驟上做一些小小的修改就可以繼續整合Standalone Tiles了。
使用Struts中的Tiles,我們必須使用 Struts 1.1 的 jar 包,后面的新版本都是不可以使用的,如果沒有的話可以上Struts的官方網站http://struts.apache.org下載一個。
我們需要在web.xml中做一些配置,加入TilesServlet,通常我們把這段配置放在FacesServlet后面。
接下來,我們要在上面這段配置定義的文件“/WEB-INF/config/tiles-config.xml”中配置 Tiles,這里的配置格式是和Struts中的配置格式是完全一樣的,就不再重復了,大家可以參考官方的參考:http://struts.apache.org/struts-tiles/index.html,在我的MyPSP項目里也使用了Tiles,大家可以參考一下我的配置。
在使用Tiles標簽的頁面中加入標簽聲明就可以使用了:<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>,以MyPSP中一個簡單的頁面作為例子,是不是和在struts中使用Tiles沒有什么區別呢?
注意:上面這個頁面使用了<f:view>,所以在子頁面中就不要再加入<f:view>了,否則會造成沖突無法正常使用。
在struts中,我們是可以在struts-config.xml中直接使用Tiles的name來直接調用Tiles,但在JSF中使用Tiles就不能這樣,JSF配置文件中的navigation只能定義到所要的頁面,而不是某個Tiles,這樣的話我們就需要兩個不同的jsp文件來處理這樣的導航。
借用我的MyPSP項目中的一段代碼作為示例: 首先我定義了一個標準的文件頭模板single_layout.jsp,也就是上面給的例子,把這個作為模板定義在tiles-config.xml中。
接著我們制作了一個具體的頁面文件/pages/activity.jsp。
隨后我們要對一個具體的頁面activity.jsp使用Tiles進行拼裝,在tiles-config.xml中進行配置。
最后需要一個jsp文件/web/activity.jsp,在其中我們通過<tiles:insert definition="mypsp.activity" flush="false"/>來引用這個definition。
我們在訪問的時候訪問/web/activity.jsp這個頁面就可以了,還挺簡單的吧。
我們再提一下如何使用Shale中的Standalone Tiles,我們只需要改兩個地方就可以了。 1.web.xml中 將:<servlet-class>org.apache.struts.Tiles.TilesServlet</servlet-class> 改成:<servlet-class>org.apache.tiles.servlets.TilesServlet</servlet-class> 這樣就可以了。
2.標簽聲明 將:<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> 改成:<%@ taglib uri="http://jakarta.apache.org/tiles" prefix="tiles" %> 這樣就可以了。