Tiles框架是Struts的一個插件。我們可以使用Tiles框架來進行頁面布局設計。Tiles框架提供了一種模板機制,它可以將網頁內容和布局分離,並允許先創建模板,然後在頁面中再插入具體的內容。
一、安裝Tiles框架
為了使用Tiles,我們必須首先在struts-config.xml文件中聲明Tiles,配置代碼如下:
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
</plug-in>
其中org.apache.struts.tiles.TilesPlugin類只需要設置一個definitions-config屬性。這個屬性值指向了一個定義文件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="def1" path="/tiles/layout1.jsp">
<put name="title" value="我的標題" />
<put name="header" value="header.jsp" />
……
</definition>
<definition name="def2" path="/tiles/layout1.jsp" >
……
</definition>
</tiles-definitions>
其中<tiles-definitions>元素中可以包含多個<definition>子元素。我們還可以將一個定義文件拆成多個定義文件,如A-defs.xml、B-defs.xml和C-defs.xml。在為definitions-config屬性賦值時,如果有多個定義文件,中間用逗號(,)分割。如下面的代碼所示:
<set-property property="definitions-config" value="/WEB-INF/A-defs.xml, /WEB-INF/B-defs.xml, /WEB-INF/C-defs.xml " />
Tiles框架還有一個定制標簽庫。我們可以使用如下的taglib指令來聲明這個標簽庫:
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
二、<jsp:include>和<tiles:insert>標簽
由於在編寫Web程序的過程中,很多頁面會出現同樣的內容,如所有的頁面都使用同樣的的頁頭和頁尾。在JSP標簽庫中提供了一個include標簽可以將其他的頁面包含到當前的頁面中,如我們可以使用如下的代碼包含頁頭和頁尾。
……
<jsp:include page = "header.jsp" />
……
<jsp:include page = "footer.jsp" />
……
在Tiles框架的標簽庫中也提供了一個insert標簽。這個標簽也可以完成和include同樣的工作。如上述代碼也可以寫成如下形式:
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
……
<tiles:insert page = "header.jsp" />
……
<tiles:insert page = "footer.jsp" />
……
雖然include和insert標簽都可以很好地解決代碼重用問題,但是並不能完全避免代碼重復的問題。如很多使用include或insert標簽的頁面也擁有很多類似或相同的代碼。如使用css布局、用table、div等HTML元素進行位置控制等。如果想避免這些代碼的重復。光使用include或insert標簽是無法做到的。而要想做到這一點,就要使用下一篇文章中介紹的Tiles模板。