Tiles2 用法簡要介紹

 

項目地址:http://tiles.apache.org/

 

1. 配置

 

單獨配置方案: 在 web.xml 中註冊 tiles初始化servlet

 

<context-param>  
       <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>  
       <param-value>/WEB-INF/tiles-defs.xml</param-value>  
</context-param>  
 
<listener>  
	<listener-class>org.apache.tiles.web.startup.TilesListener</listener-class>  
</listener>
 

 

與 Spring MVC 集成配置方案:在 xxx-servlet.xml 中

 

<!-- 與模板框架 Tiles2 的集成 -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
	<property name="definitions">
		<list>
			<value>/WEB-INF/tiles/tiles-defs.xml</value>
		</list>
	</property>
</bean>

<!-- Tiles2 模板view解析 -->    
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
 

 

2. 使用方法

 

a. 定義模板頁面 template.jsp

 

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<tiles:insertAttribute name="hrefBasepath"></tiles:insertAttribute>
		
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		
		<title><tiles:getAsString name="title"/></title>
		
		<!-- css -->
		<tiles:insertAttribute name="commonCss"></tiles:insertAttribute>	
		
		<!-- Javascripts -->
		<tiles:insertAttribute name="commonJs"></tiles:insertAttribute>
	</head>
  
	<body>
		<div id="body-wrapper"> <!-- Wrapper for the radial gradient background -->
			<tiles:insertAttribute name="menu"></tiles:insertAttribute>
			<tiles:insertAttribute name="body"></tiles:insertAttribute>
		</div>
	</body>
	
</html>
   

b. 在 tiles-defs.xml 中定義和配置模板

 

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

<tiles-definitions>

	<definition name="index" template="/WEB-INF/jsp/template/template.jsp">
		<put-attribute name="title" value="97 King Of Fight" />
		<put-attribute name="hrefBasepath" value="/WEB-INF/jsp/views/hrefBasepath.jsp" />
		<put-attribute name="commonCss" value="/WEB-INF/jsp/views/commonCss.jsp" />
		<put-attribute name="commonJs" value="/WEB-INF/jsp/views/commonJs.jsp" />
		<put-attribute name="menu" value="/WEB-INF/jsp/views/menu.jsp" />
		<put-attribute name="body" value="/WEB-INF/jsp/views/indexBody.jsp" />
	</definition>

</tiles-definitions>
 

 

同時指定 模板中的 <tiles:insertAttribute></tiles:insertAttribute> 標籤所表示的網頁片段的內容。

 

c. 在所有的jsp頁面中,都可以通過 <tiles:insertDefinition> 標籤類引入該模板的內容,例如下面的 index.jsp

 

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<tiles:insertDefinition name="index"></tiles:insertDefinition>
 

 該頁面,將會引入在 tiles-defs.xml 中註冊的 名稱爲 "index" 的模板。該模板內容將以 template.jsp 爲佈局方案,同時按配置中指定的片段來替代 <tiles:insertAttribute> 標籤,從而形成一個完整的頁面。

 

d. 關於 tiles-defs.xml 中 <definition> 元素的部分使用方法

 

一個<definition>的定義中,可以通過<put-attribue>嵌套另一個<definition> ,也可以通過 extends 屬性集成另一個<definition>

 

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

<tiles-definitions>

	<definition name="index.header" template="/WEB-INF/jsp/template/header.jsp">
		<put-attribute name="title" value="97 King Of Fight" />
		<put-attribute name="hrefBasepath" value="/WEB-INF/jsp/views/hrefBasepath.jsp" />
		<put-attribute name="commonCss" value="/WEB-INF/jsp/views/commonCss.jsp" />
		<put-attribute name="commonJs" value="/WEB-INF/jsp/views/commonJs.jsp" />
	</definition>

	<definition name="index" template="/WEB-INF/jsp/template/template.jsp">
		<!-- 通過 value=name 引用前面的 definition -->
		<put-attribute name="header" value="index.header"/>
		<put-attribute name="menu" value="/WEB-INF/jsp/views/menu.jsp" />
		<put-attribute name="body" value="/WEB-INF/jsp/views/indexBody.jsp" />
	</definition>

	<!-- 通過屬性 extends=name 定義繼承,只需修改有變化的部分 -->
	<definition name="welcome" extends="index">
		<put-attribute name="body" value="/WEB-INF/jsp/views/welcomeBody.jsp" />
	</definition>

</tiles-definitions>
 

 

  通過測試發現:如果上面的繼承部分寫成這樣

 

<!-- 通過屬性 extends=name 定義繼承,只需修改有變化的部分 -->
<definition name="welcome" extends="index">
	<!-- title 屬性是不會被覆蓋的 -->
	<put-attribute name="title" value="Welcome" />
	<put-attribute name="body" value="/WEB-INF/jsp/views/welcomeBody.jsp" />
</definition>
 

 因爲繼承的 index ,index 中沒有 title 部分定義,只有header, 而 title 在 header 中, 故不能覆蓋 title , 而只可以直接覆蓋 header

 

可以用 匿名定義 的方法,來使用 嵌套 定義

 

<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

<tiles-definitions>
	
	<definition name="index" template="/WEB-INF/jsp/template/template.jsp">
		<put-attribute name="header">
			<definition template="/WEB-INF/jsp/template/header.jsp">
				<put-attribute name="title" value="97 King Of Fight" />
				<put-attribute name="hrefBasepath" value="/WEB-INF/jsp/views/hrefBasepath.jsp" />
				<put-attribute name="commonCss" value="/WEB-INF/jsp/views/commonCss.jsp" />
				<put-attribute name="commonJs" value="/WEB-INF/jsp/views/commonJs.jsp" />
			</definition>
		</put-attribute>
		<put-attribute name="menu" value="/WEB-INF/jsp/views/menu.jsp" />
		<put-attribute name="body" value="/WEB-INF/jsp/views/indexBody.jsp" />
	</definition>

</tiles-definitions>
 

 

另一種繼承方式:如果頁面中只是佈局發生改變,而需要引入的內容是一樣的。

 

<definition name="indexLayout2" extends="index" template="/WEB-INF/jsp/template/layout2.jsp">
</definition>
 

 

動態定義模板

 

上面的方法都是在編輯 tiles-defs.xml 文件,是靜態配置,需要重啓服務,纔能有效。

 

Tiles2 提供了在不許要重啓服務,也不需要在 tiles-defs.xml 配置就能動態生成模板的方法。

 

那就是直接在 jsp 頁面中,使用 tiles 標籤,動態定義。

 

有兩種方法可以實現, 插入一個匿名模板 和 定義一個模板

 

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<!-- 在該位置動態插入一個匿名模板,不需在 xml 文件中配置,該方案可以在不重啓服務的情況下,動態建立一個模板 -->
<tiles:insertTemplate template="/WEB-INF/jsp/template/template.jsp">
		<tiles:putAttribute name="header">
			<tiles:insertTemplate template="/WEB-INF/jsp/template/header.jsp">
				<tiles:putAttribute name="title" value="97 King Of Fight" />
				<tiles:putAttribute name="hrefBasepath" value="/WEB-INF/jsp/views/hrefBasepath.jsp" />
				<tiles:putAttribute name="commonCss" value="/WEB-INF/jsp/views/commonCss.jsp" />
				<tiles:putAttribute name="commonJs" value="/WEB-INF/jsp/views/commonJs.jsp" />
			</tiles:insertTemplate>
		</tiles:putAttribute>
		<tiles:putAttribute name="menu" value="/WEB-INF/jsp/views/menu.jsp" />
		<tiles:putAttribute name="body" value="/WEB-INF/jsp/views/indexBody.jsp" />
</tiles:insertTemplate>

 

<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<!-- 動態定義模板,不需要在 xml 文件中配置,該方案可以在不重啓服務的情況下,動態定義一個模板 -->
<tiles:definition name="index3" template="/WEB-INF/jsp/template/template.jsp">
		<tiles:putAttribute name="header">
			<tiles:insertTemplate template="/WEB-INF/jsp/template/header.jsp">
				<tiles:putAttribute name="title" value="97 King Of Fight" />
				<tiles:putAttribute name="hrefBasepath" value="/WEB-INF/jsp/views/hrefBasepath.jsp" />
				<tiles:putAttribute name="commonCss" value="/WEB-INF/jsp/views/commonCss.jsp" />
				<tiles:putAttribute name="commonJs" value="/WEB-INF/jsp/views/commonJs.jsp" />
			</tiles:insertTemplate>
		</tiles:putAttribute>
		<tiles:putAttribute name="menu" value="/WEB-INF/jsp/views/menu.jsp" />
		<tiles:putAttribute name="body" value="/WEB-INF/jsp/views/indexBody.jsp" />
</tiles:definition>

<tiles:insertDefinition name="index3"></tiles:insertDefinition>
 

 

更詳細的使用方法請參照官方文檔 地址:http://tiles.apache.org/framework/tutorial/advanced/index.html

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章