Apache Tiles 2.x 应用指南

余额不足 2011-08-03

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

基本用法

设置Tiles元素-核心配置文件的书写方法

Tiles核心配置文件格式为xml,文档类型为tiles-definitions。要在每一个配置文件的开头加入下述说明:

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

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

可以使用定义描述一个带有名字的模板。下例定义了一个没有属性的模板:

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

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

<tiles-definitions>  
  <definition name="header" template="/fragments/header.jsp" />  
    
  <definition name="main" template="/index.jsp">  
    <put-attribute name="title" value="标题名" type="string"/>  
    <put-attribute name="header" value="header" type="definition"/>  
    <put-attribute name="footer" value="/fragments/footer.jsp" />  
  </definition>  
</tiles-definitions>

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

<tiles-definitions>  
  <definition name="header" template="/fragments/header.jsp" />  
    
  <definition name="main" template="/index.jsp">  
    <put-attribute name="title" value="主画面" type="string"/>  
    <put-attribute name="header" value="header" type="definition"/>  
    <put-attribute name="footer" value="/fragments/footer.jsp" />  
  </definition>  
    
  <definition name="user" extends="main">  
    <put-attribute name="title" value="新建用户" />  
  </definition>   
</tiles-definitions>

读取Tiles元素-JSP页面上的处理方法

要想在JSP页面上使用Tiles标签,首先要引入标签库。

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

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

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

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

引用
<tiles:insertTemplate template="/index.jsp"> 

<tiles:putAttributename="title"value="主画面"/>

<tiles:putAttributename="header"value="header"/>

<tiles:putAttributename="footer"value="/fragments/footer.jsp"/>

</tiles:insertTemplate>

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

<tiles:insertDefinition name="main"/>

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

<tiles:getAsStringname="title"/>

<tiles:insertAttributename="header"/>

<tiles:insertAttributename="footer"/>

Tiles架构在各个领域中的应用

在Web应用中直接使用Tiles架构

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

<servlet>  
  <servlet-name>tiles</servlet-name>  
  <servlet-class>  
    org.apache.tiles.servlet.TilesServlet  
  </servlet-class>  
  <load-on-startup>2</load-on-startup>  
</servlet>

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

<servlet>  
  <servlet-name>tiles</servlet-name>  
  <servlet-class>  
    org.apache.tiles.servlet.TilesServlet  
  </servlet-class>  
  <init-param>  
    <param-name>definitions-config</param-name>  
    <param-value>  
      /WEB-INF/tiles-defs.xml  
    </param-value>  
  </init-param>  
  <load-on-startup>2</load-on-startup>  
</servlet>

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

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

更多内容

关于Tiles的更多内容,如

ListAttributes

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

Tiles知识要点

Tiles中的三大元素:定义、模板、属性

template=URI{1}

definition=template{1}+attribute*

attribute=STRING{1}|definition{1}|template{1}

Tiles核心配置文件

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

引入Tiles标签库

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

在Web应用中使用直接Tiles架构

在web.xml中关于Tiles架构的定义

<servlet>  
  <servlet-name>tiles</servlet-name>  
  <servlet-class>  
    org.apache.tiles.servlet.TilesServlet  
  </servlet-class>  
  <init-param>  
    <param-name>definitions-config</param-name>  
    <param-value>  
      /WEB-INF/tiles-defs.xml  
    </param-value>  
  </init-param>  
  <load-on-startup>2</load-on-startup>  
</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

相关推荐