转自:http://jaymsimusic.iteye.com/blog/1138906

Apache Tiles 2.x 应用指南

博客分类:

 
Jakarta Tiles是一个用于在模板中对页面进行布局的框架。Tiles产生之初是Struts架构的一部分,后来Tiles独立出来常与Spring架构配合,本文描述了独立于其它架构而在原始WEB应用中使用Tiles的方法。

基本用法 
设置Tiles元素 - 核心配置文件的书写方法 
Tiles核心配置文件格式为xml,文档类型为tiles-definitions。要在每一个配置文件的开头加入下述说明:

  1. <!DOCTYPE tiles-definitions PUBLIC
  2. "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
  3. "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

Tiles中的基本元素有三种:定义、模板和属性。Tiles核心配置文件(tiles-definitions)中的基本单元是“definition”。一个“definition”必须与一个“template” 相对应。“template”是一个URI、通常情况下指的是一个JSP页面。一个“definition”可以包含多个“attribute”,一个attribute可以是一个字符串、可以是一个定义的名字、也可以是一个模板。 
可以使用定义描述一个带有名字的模板。下例定义了一个没有属性的模板:

  1. <tiles-definitions>
  2. <definition name="header" template="/fragments/header.jsp" />
  3. </tiles-definitions>

模板可以包含一个或多个属性,属性可以是一个字符串,或者是一个定义的名字,或者是一个模板。下例定义了一个包含属性的模板:

  1. <tiles-definitions>
  2. <definition name="header" template="/fragments/header.jsp" />
  3. <definition name="main" template="/index.jsp">
  4. <put-attribute name="title" value="标题名" type="string"/>
  5. <put-attribute name="header" value="header" type="definition"/>
  6. <put-attribute name="footer" value="/fragments/footer.jsp" />
  7. </definition>
  8. </tiles-definitions>

定义可以被继承,继承之后的定义属性可以改变,模板不可以改变。下例定义了一个具有继承关系的模板:

  1. <tiles-definitions>
  2. <definition name="header" template="/fragments/header.jsp" />
  3. <definition name="main" template="/index.jsp">
  4. <put-attribute name="title" value="主画面" type="string"/>
  5. <put-attribute name="header" value="header" type="definition"/>
  6. <put-attribute name="footer" value="/fragments/footer.jsp" />
  7. </definition>
  8. <definition name="user" extends="main">
  9. <put-attribute name="title" value="新建用户" />
  10. </definition>
  11. </tiles-definitions>

读取Tiles元素 - JSP页面上的处理方法 
要想在JSP页面上使用Tiles标签,首先要引入标签库。

  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

在JSP页面上插入一个模板的基本标签是<tiles:insertTemplate />,如下例:

  1. <tiles:insertTemplate template="/fragments/footer.jsp"/>

如果插入的模板包含属性,则在插入模板的同时,必须使用<tiles:putAttribute />标签为其指定属性值:

引用
<tiles:insertTemplate template="/index.jsp">  
  <tiles:putAttribute name="title" value="主画面"/>  
  <tiles:putAttribute name="header" value="header"/>  
  <tiles:putAttribute name="footer" value="/fragments/footer.jsp"/>  
</tiles:insertTemplate> 

插入一个定义的基本标签是<tiles:insertDefinition />,如下例:

  1. <tiles:insertDefinition name="main"/>

在模板中可以指定属性的位置。设置一个属性的基本标签有两种,如果属性被指定为定义或模板,则使用<tiles:insertAttribute />标签;如果属性被指定为字符串,则使用<tiles:getAsString />标签。如: 
<tiles:getAsString name="title"/>  
<tiles:insertAttribute name="header"/>  
<tiles:insertAttribute name="footer"/>

Tiles架构在各个领域中的应用 
在Web应用中直接使用Tiles架构 
在web.xml中加入下述servlet即可实现在Web应用中直接使用Tiles架构的目的。

  1. <servlet>
  2. <servlet-name>tiles</servlet-name>
  3. <servlet-class>
  4. org.apache.tiles.servlet.TilesServlet
  5. </servlet-class>
  6. <load-on-startup>2</load-on-startup>
  7. </servlet>

TilesServlet默认查找“/WEB-INF/tiles.xml”作为Tiles核心配置文件,如果要手动指定Tiles核心配置文件的位置,可以为Servlet设置名为“definitions-config”的初始化参数值,样例如下:

  1. <servlet>
  2. <servlet-name>tiles</servlet-name>
  3. <servlet-class>
  4. org.apache.tiles.servlet.TilesServlet
  5. </servlet-class>
  6. <init-param>
  7. <param-name>definitions-config</param-name>
  8. <param-value>
  9. /WEB-INF/tiles-defs.xml
  10. </param-value>
  11. </init-param>
  12. <load-on-startup>2</load-on-startup>
  13. </servlet>

在传统Servlet中利用TilesServlet加载的Tiles定义(definition)可以使用TilesContainer的render方法实现转向到Tiles定义。代码如下:

  1. TilesContainer container = TilesAccess.getContainer(
  2. request.getSession().getServletContext());
  3. container.render("main", request, response);

更多内容 
关于Tiles的更多内容,如

List Attributes 
请参考Tiles官方网站:http://tiles.apache.org

Tiles 知识要点 
Tiles中的三大元素:定义、模板、属性 
template = URI{1} 
definition = template{1} + attribute* 
attribute = STRING{1} | definition{1} | template {1}

Tiles核心配置文件

  1. <!DOCTYPE tiles-definitions PUBLIC
  2. "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
  3. "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

引入Tiles标签库

  1. <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

在Web应用中使用直接Tiles架构 
在web.xml中关于Tiles架构的定义

  1. <servlet>
  2. <servlet-name>tiles</servlet-name>
  3. <servlet-class>
  4. org.apache.tiles.servlet.TilesServlet
  5. </servlet-class>
  6. <init-param>
  7. <param-name>definitions-config</param-name>
  8. <param-value>
  9. /WEB-INF/tiles-defs.xml
  10. </param-value>
  11. </init-param>
  12. <load-on-startup>2</load-on-startup>
  13. </servlet>

资源 
http://tiles.apache.org/

JAR包 
Tiles开发包 
tiles-core-2.0.3.jar 
tiles-api-2.0.3.jar 
tiles-jsp-2.0.3.jar

Tiles所依赖的开发包 
commons-beanutils-1.7.0.jar 
commons-digester-1.8.jar 
commons-logging-api-1.1.jar

Apache Tiles 2.x 应用指南(转)的更多相关文章

  1. apache tiles 页面模板的使用

    jar包maven <!-- Tiles 模板--> <dependency> <groupId>org.apache.tiles</groupId> ...

  2. [页面模板框架对比] Apache Tiles VS Sitemesh

    1. 原理对比 (1) Apache Tiles 顾名思义,Tile是瓷砖的意思,也就是说一个网页是由多个Tile组成的. 用户通过访问一个页面的Apache Tiles定义名,就可以访问一个由定义文 ...

  3. 第6章—渲染web视图—使用Apache Tiles视图定义布局

    使用Apache Tiles视图定义布局   Tiles是一个免费的开源模板Java应用程序的框架.基于复合模式简化的用户界面的构建.对于复杂的网站仍是最简单.最优雅的方式与任何MVC技术一起工作.S ...

  4. 《Apache HttpClient 4.3开发指南》

    转载自:http://blog.csdn.net/chszs/article/details/16854747 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chs ...

  5. 使用 Apache Tiles 3 构建页面布局

    参考博客:http://aiilive.blog.51cto.com/1925756/1596059Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以 ...

  6. spring项目报org.apache.tiles.definition.DefinitionsFactoryException: I/O错误原因及解决办法。

    今天升级一个spring项目遇到如下错: HTTP Status 500 - Request processing failed; nested exception is org.apache.til ...

  7. Spring 4 MVC+Apache Tiles 3 Example

    In this post we will integrate Apache Tiles 3 with Spring MVC 4, using annotation-based configuratio ...

  8. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

    一.SiteMesh项目简介 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容 ...

  9. Apache Kafka Connect - 2019完整指南

    今天,我们将讨论Apache Kafka Connect.此Kafka Connect文章包含有关Kafka Connector类型的信息,Kafka Connect的功能和限制.此外,我们将了解Ka ...

随机推荐

  1. jQuery中$.getJSON的返回值问题

    在使用$.getJSON获得数据库的返回值后,想将该值return传给其他函数.结果遇到问题. $.getJSON(url, data, function(result) { return resul ...

  2. 数据结构算法应用C++语言描述——(1)C++基础知识

    一.二维数组 (1)二维数组的列是固定时,行未知时使用动态分配 当一个二维数组每一维的大小在编译时都是已知时,可以采用类似于创建一维数组的语法 来创建二维数组.例如,一个类型为char的7×5数组可用 ...

  3. web.xml中的主要元素说明(listener, filter, servlet)

    web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...

  4. vim中使用gdb。

    引用文章A:http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-vimgdb/ 引用介绍:使用vimgdb来完成gdb的嵌入. 需要的 ...

  5. C语言-getopt函数

    #include<unistd.h> int getopt(int argc,char *const argv[],const char *optstring); extern char ...

  6. (原)JNI中env->GetByteArrayElements和AndroidBitmap_getInfo的冲突

    也不是很确定,前段时间的代码没有出问题,但是今天调试了半天,一直崩溃:vm aborting. 以前的部分代码: JNIEXPORT void JNICALL XXX (JNIEnv* env,job ...

  7. svg 文字

    <text>标签 在svg中用使用<text>标签去定义一段文字.如 Example 1 在svg中写下 在平坦的路上曲折前行 Example 1 Dome <svg h ...

  8. YUM更换源--yum找不到安装包(转)

    公司提供的CentOS VM中,/etc/yum.repos.d 下 只有一个build.repo,其中提供的yum 源只有公司内部的几个源,很多包在这些源中都找不到.于是要添加别的源,下面的帖子中介 ...

  9. 使用 phpMailer 基于(SMTP) 发送邮件

    PHPMailer是一个用于发送电子邮件的PHP函数包.它提供的功能包括:在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址.支持多种邮件编码包括:8bit,base64,binary和quote ...

  10. Python学习笔记(六)Python的列表生成式、生成器

    列表生成式 List Comprehensions 列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式. 简单的数值范围的list可以使用一下方式生成: >>> ...