`

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

 

 

 

 

0
1
分享到:
评论

相关推荐

    Struts2+Tiles

    通过阅读和学习《Struts2+Tiles》相关的博客文章(如博文链接所示),你可以深入理解这两者的集成方式,如何配置Struts2的struts.xml和tiles.xml文件,以及如何在Action中使用Tiles API来决定页面内容。此外,你还能...

    使用Tiles 中文

    ### 使用Tiles进行Web应用布局管理 #### 知识点一:Tiles框架的引入与优势 在Web开发领域,特别是基于Java的Struts框架项目中,布局管理与内容组织一直是复杂而重要的任务。传统的做法,如直接在JSP页面中混杂表示...

    struts2 tiles项目

    - `JSP页面`:使用Tiles定义来构建的视图,其中可能包含Struts2标签库和Tiles标签库的使用。 - `web.xml`:Web应用的部署描述符,配置了Struts2 Filter和其他必需的Servlet或Filter。 项目中可能还包含其他文件,如...

    一个简单的应用Struts中tiles的例子

    4. **使用Tiles动作**:在Action类中,通过调用`TilesUtil`的`putAttribute`方法将数据放入作用域,然后重定向到Tiles定义的名称。例如: ```java public ActionForward execute(ActionMapping mapping, ...

    springmvc与apache tiles整合demo

    2. **配置Tiles**:在Spring MVC的配置文件(如`tiles-context.xml`)中,需要配置Tiles的视图解析器`TilesViewResolver`,以及相关的`TilesConfigurer`,设置Tiles的配置文件路径。 3. **创建Tiles配置文件**:...

    jsf入门列子和jsf与Tiles结合

    `verify2()`和`verify(ActionEvent e)`是两个处理用户登录验证的方法。如果用户名不是"admin",则返回"failure",表示登录失败,否则返回"success"。`verify(ActionEvent e)`方法还处理了事件,当登录失败时,会更新...

    tiles框架增加一个页面的步骤

    ### Tiles框架增加一个页面的步骤详解 #### 一、引言 在Web开发中,保持一致的页面布局和样式对于提升用户体验至关重要。...总之,熟练掌握Tiles框架的使用方法,对于提升Web开发效率有着重要意义。

    使用sitemesh替换tiles2,spring mvc+spring web flow+sitemsh

    尽管Tiles2也可以在Spring Web Flow中使用,但Sitemesh的简单性和易用性使其成为替代选择。 **集成过程** 1. 添加依赖:在项目的`pom.xml`或构建文件中,需要添加Sitemesh的依赖。 2. 配置Sitemesh:在Spring配置...

    springMVC + freemarker + apache tiles

    这个项目还提到了Ibatis的简单用法,Ibatis是一个轻量级的持久层框架,它提供了SQL映射功能,将SQL语句与Java代码分离,简化了数据库操作。集成Ibatis可能包括配置数据源、SqlSessionFactoryBean,创建Mapper接口和...

    tiles框架.ppt

    **Tiles的使用方法:** 1. **&lt;tiles:insert&gt; 标签**:类似`&lt;jsp:include&gt;`,用于在页面中插入其他页面。例如,`&lt;tiles:insert page="要引入的页面"&gt;`。 2. **Tiles模板**:通过模板机制,可以减少重复代码,将页面...

    tiles示例

    良好的注释是学习新框架的关键,可以让开发者更快地掌握Tiles的使用方法。 6. **实践应用**:学习Tiles示例通常包括创建定义、配置Tiles框架、在JSP页面中使用Tiles标签以及处理传入的属性。通过实践,开发者可以...

    apache_tiles2.2---文档读后总结

    属性(Attribute)是 Tiles 中用于填充模板的关键元素,它们可以是简单的字符串、复杂的模板片段或预定义的定义(definition)。属性的种类决定了其在页面渲染过程中的作用和处理方式。例如: - 字符串类型的属性...

    cesium 3d-tiles平移旋转贴地.zip

    3D Tiles的平移和旋转不仅仅是简单的视角变化,还涉及到3D空间中的坐标转换和视口投影。Cesium内部已经处理了这些复杂的数学计算,开发者只需要调用相应的API即可。在处理3D Tiles时,你还需要理解每个TileSet和Tile...

    Struts-Tiles.pdf

    ### Struts Tiles 框架详解 #### 一、引言 在开发大型网站时,一致的外观与感觉(Look and Feel,简称 L&F)是必不可...通过比较 Tiles 与 JSP Include 的优劣,我们可以根据具体需求选择最适合的方法来实现页面布局。

    struts2.0 + tiles配置案例源码

    3. **Action结果映射**:在Action类的execute方法中,返回一个Tiles定义的名称,Struts2会根据这个名称找到对应的布局和内容进行渲染。 4. **JSP页面**:使用Tiles标签库在JSP页面中引用组件,如`&lt;tiles:insert...

    \tiles框架.rar

    在Tiles框架的上下文中,水印可能涉及到如何在网页设计中使用Tiles框架创建动态的、带有水印的页面元素,或者是在Tiles布局中整合水印功能的技术方法。 **Tiles框架的核心概念与功能:** 1. **定义(Definitions)...

    java 写的 Sliding tiles小游戏

    2. **PuzzleTile** 类:代表拼图的单个块,可能包含以下属性和方法: - 块的值:每个块都有一个唯一的值,对应拼图的一部分。 - 位置:块在网格中的坐标。 - 图像:块对应的图片数据,用于渲染。 - 方法:包括...

    struts tiles 高级用户教程(英文版),对大家很有用的

    每个布局都有其请求的属性列表、使用方法及实现方式,开发者可根据需求选择合适的布局。 #### 开发自定义布局 除了预定义的布局,Tiles还允许开发者创建自定义布局,满足特定的应用场景需求。 #### 动态门户示例 ...

    struts1 tiles

    通过分析和运行这个项目,你可以更深入地理解Struts1和Tiles的工作原理及使用方法。 总之,Struts1 Tiles提供了一种强大的方式来管理和组织Web应用程序的视图部分,使开发者能够专注于页面组件的设计和复用,而不是...

    Python库 | brasil.gov.tiles-2.0a1-py2-none-any.whl

    **Python库brasil.gov.tiles-2.0a1-py2-none-any.whl详解** `brasil.gov.tiles` 是一个Python库,专为处理与巴西政府相关的地理空间数据而设计。这个库的名字暗示了它可能主要用于获取、操作和展示巴西的地图瓦片...

Global site tag (gtag.js) - Google Analytics