项目地址: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
分享到:
相关推荐
通过阅读和学习《Struts2+Tiles》相关的博客文章(如博文链接所示),你可以深入理解这两者的集成方式,如何配置Struts2的struts.xml和tiles.xml文件,以及如何在Action中使用Tiles API来决定页面内容。此外,你还能...
### 使用Tiles进行Web应用布局管理 #### 知识点一:Tiles框架的引入与优势 在Web开发领域,特别是基于Java的Struts框架项目中,布局管理与内容组织一直是复杂而重要的任务。传统的做法,如直接在JSP页面中混杂表示...
- `JSP页面`:使用Tiles定义来构建的视图,其中可能包含Struts2标签库和Tiles标签库的使用。 - `web.xml`:Web应用的部署描述符,配置了Struts2 Filter和其他必需的Servlet或Filter。 项目中可能还包含其他文件,如...
4. **使用Tiles动作**:在Action类中,通过调用`TilesUtil`的`putAttribute`方法将数据放入作用域,然后重定向到Tiles定义的名称。例如: ```java public ActionForward execute(ActionMapping mapping, ...
2. **配置Tiles**:在Spring MVC的配置文件(如`tiles-context.xml`)中,需要配置Tiles的视图解析器`TilesViewResolver`,以及相关的`TilesConfigurer`,设置Tiles的配置文件路径。 3. **创建Tiles配置文件**:...
`verify2()`和`verify(ActionEvent e)`是两个处理用户登录验证的方法。如果用户名不是"admin",则返回"failure",表示登录失败,否则返回"success"。`verify(ActionEvent e)`方法还处理了事件,当登录失败时,会更新...
### Tiles框架增加一个页面的步骤详解 #### 一、引言 在Web开发中,保持一致的页面布局和样式对于提升用户体验至关重要。...总之,熟练掌握Tiles框架的使用方法,对于提升Web开发效率有着重要意义。
尽管Tiles2也可以在Spring Web Flow中使用,但Sitemesh的简单性和易用性使其成为替代选择。 **集成过程** 1. 添加依赖:在项目的`pom.xml`或构建文件中,需要添加Sitemesh的依赖。 2. 配置Sitemesh:在Spring配置...
这个项目还提到了Ibatis的简单用法,Ibatis是一个轻量级的持久层框架,它提供了SQL映射功能,将SQL语句与Java代码分离,简化了数据库操作。集成Ibatis可能包括配置数据源、SqlSessionFactoryBean,创建Mapper接口和...
**Tiles的使用方法:** 1. **<tiles:insert> 标签**:类似`<jsp:include>`,用于在页面中插入其他页面。例如,`<tiles:insert page="要引入的页面">`。 2. **Tiles模板**:通过模板机制,可以减少重复代码,将页面...
良好的注释是学习新框架的关键,可以让开发者更快地掌握Tiles的使用方法。 6. **实践应用**:学习Tiles示例通常包括创建定义、配置Tiles框架、在JSP页面中使用Tiles标签以及处理传入的属性。通过实践,开发者可以...
属性(Attribute)是 Tiles 中用于填充模板的关键元素,它们可以是简单的字符串、复杂的模板片段或预定义的定义(definition)。属性的种类决定了其在页面渲染过程中的作用和处理方式。例如: - 字符串类型的属性...
3D Tiles的平移和旋转不仅仅是简单的视角变化,还涉及到3D空间中的坐标转换和视口投影。Cesium内部已经处理了这些复杂的数学计算,开发者只需要调用相应的API即可。在处理3D Tiles时,你还需要理解每个TileSet和Tile...
### Struts Tiles 框架详解 #### 一、引言 在开发大型网站时,一致的外观与感觉(Look and Feel,简称 L&F)是必不可...通过比较 Tiles 与 JSP Include 的优劣,我们可以根据具体需求选择最适合的方法来实现页面布局。
3. **Action结果映射**:在Action类的execute方法中,返回一个Tiles定义的名称,Struts2会根据这个名称找到对应的布局和内容进行渲染。 4. **JSP页面**:使用Tiles标签库在JSP页面中引用组件,如`<tiles:insert...
在Tiles框架的上下文中,水印可能涉及到如何在网页设计中使用Tiles框架创建动态的、带有水印的页面元素,或者是在Tiles布局中整合水印功能的技术方法。 **Tiles框架的核心概念与功能:** 1. **定义(Definitions)...
2. **PuzzleTile** 类:代表拼图的单个块,可能包含以下属性和方法: - 块的值:每个块都有一个唯一的值,对应拼图的一部分。 - 位置:块在网格中的坐标。 - 图像:块对应的图片数据,用于渲染。 - 方法:包括...
每个布局都有其请求的属性列表、使用方法及实现方式,开发者可根据需求选择合适的布局。 #### 开发自定义布局 除了预定义的布局,Tiles还允许开发者创建自定义布局,满足特定的应用场景需求。 #### 动态门户示例 ...
通过分析和运行这个项目,你可以更深入地理解Struts1和Tiles的工作原理及使用方法。 总之,Struts1 Tiles提供了一种强大的方式来管理和组织Web应用程序的视图部分,使开发者能够专注于页面组件的设计和复用,而不是...
**Python库brasil.gov.tiles-2.0a1-py2-none-any.whl详解** `brasil.gov.tiles` 是一个Python库,专为处理与巴西政府相关的地理空间数据而设计。这个库的名字暗示了它可能主要用于获取、操作和展示巴西的地图瓦片...