首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Tiles2 用法精简介绍

2012-12-22 
Tiles2 用法简要介绍?项目地址:http://tiles.apache.org/?1. 配置?单独配置方案: 在 web.xml 中注册 tiles

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" 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

?

?

?

?

热点排行