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