`
disankyo
  • 浏览: 42802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tiles 简介

阅读更多


    1.Tiles简介

Tiles框架可以令我们组合可以复用的Tiles来搭建网页。例如,下图中的页面就是通过组合一个header, 一个footer, 一个menu 和一个body搭建起来的。

每一个Tiles(header, menu, body, ...)都是一个JSP页面,它们也可以通过组合其他的Tiles来搭建。

应用Tiles就好比是应用Java的方法:需要你定义Tiles(方法体),然后你才能够在任何你需要的地方“调用”该方法体,并传递一些参数。在Tiles中,为了避免与request参数相混淆,参数(parameters)被称为属性(attributes)。

Tiles的方法体(也可以说是内容——译者注)可以是一个简单的JSP页面,   或者是一个Struts的动作(action),或者任何一个指向现存的网页资源的URI。

插入或者调用Tiles可以通过在JSP中的任何位置置入如下tag来完成:<tiles:insert ...>。插入也可以通过下面的方法来完成:指定一个作为Struts forward的路径的自定义名;或者指定一个作为Struts action的input,forward或者include属性的自定义名。

Tiles的方法体是用来创建版面布局,可复用部分等的,而Tiles的插入操作是用来插入Tiles的。同一个Tiles可以在同一个站点甚至同一个页面被重用多次。

Tiles的插入可以与一个在Tiles中称作“definition”的逻辑名联系起来。一个Tiles的definition包含一个逻辑名,一个主体页面和一些属性值。definition的声明并不插入与其相关联的Tiles方法体,它只是让Tiles与它的逻辑名关联起来。可以在任何能够插入Tiles地方运用定义的逻辑名,这样与其对应的Tiles及其属性就被插入进来了。

Tiles的definition的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。Definition可以继承于另外一个Tiles的definition,重载一些属性,添加一些新的属性等等。这就允许“父类”的definition定义一些通用的layout, header, menu, footer. 所有其他继承于该父类的definition可以简单地通过改变其definition来改变整个页面。

 
2.简单的例子

(1)插入到JSP页面中:

<tiles:insert page="/layouts/commonLayout.jsp" flush="true" />

这个例子将tag中指定的页面插入到整个页面中来。page属性可以是指向任何现存网络资源有效的URL。

(2)插入一个Tiles同时传递属性值:

<tiles:insert page="/layouts/classicLayout.jsp" flush="true">

        <tiles:put name="title"  value="Page Title" />

        <tiles:put name="header" value="/common/header.jsp" />

        <tiles:put name="footer" value="/common/footer.jsp" />

        <tiles:put name="menu"   value="/common/menu.jsp" />

        <tiles:put name="body"   value="/tiles/mainBody.jsp" />

</tiles:insert>

这个例子插入了指定的页面,同时传递了它的属性值。属性值存储在Tiles的context中,这个context也被传递到插入的tag中,然后可以用它们的名字进行访问。

(3)作为String来得到一个属性

<tiles:getAsString name="title" />

这个例子得到 ”tilte” 属性的值,并在当前输出流中把它作为字符串打印出来。toString() 方法应用于该属性值,允许作为值来传递任何对象。

(4)通过引用属性来插入Tiles

<tiles:insert attribute='menu' />

该例子插入了被 “menu” 属性值引用的Tiles。当前的Tiles的context首先获得该属性值,然后它再用来作为页面目标而插入。

(5)典型的页面布局

这个例子是典型的header-footer-menu-body 组合而成的页面布局。

<tr>
  <td colspan="2"><tiles:insert attribute="header" /></td>
</tr>
<tr>
  <td width="140" valign="top">
    <tiles:insert attribute='menu' />
  </td>
  <td valign="top"  align="left">
    <tiles:insert attribute='body' />
  </td>
</tr>
<tr>
  <td colspan="2">
    <tiles:insert attribute="footer" />
  </td>
</tr>
</table>
</body>
</html>

该布局可以在一个JSP页面中声明(比如:/layouts/classicLayout.jsp)。它可以与在例子(2)中描述的tag一起结合运用。

3.Tiles的定义(Definitions)

Tiles的definition包含一个带有Tiles URL的逻辑名和一些属性值。定义并不插入Tiles。插入是在后来用definition的名字来完成的。一个definition的逻辑名可以在站点中使用多次,实现对Tiles的轻松复用。

Tiles的definition可以继承自另外一个definition,并且能够重载其属性或者添加属性。这使得通过一些属性来构造不同的definition变得更加容易。比如,你可以定义一个“父类”的definition同时定义主要的 header, menu, footer, 和一个默认的 title。然后令你的每一个页面的definitions继承自这个“父类”的definition并重载title和body属性。

Tiles的definitions的定义可以在JSP页面中进行,也可以在一个或者多个中心控制文件中进行。为了使中心控制文件中定义的definitions有效,你需要初始化“定义池”(definitions factory),这个定义池能够解释文件中的definitions并把它们提供给Tiles框架。

4.使定义池生效

为了使在文件中定义的Tiles definitions生效,你需要写下这些文件并初始化定义池。

初始化根据你是否应用Struts或者所用的Struts版本的不同而不同(这里只介绍了Struts1.1版本的配置)。

Struts1.1

应用Tiles的插件(plug-in)使Tiles definition生效。该插件创建定义池并把它传递给带有参数的配置对象。参数可以在web.xml文件中配置,也可以作为插件的参数来配置。插件首先从web.xml中读取参数,然后,重载那些在插件中也配置了的参数。所有的参数都是可选的,也可以忽略它们。插件应该在每一个struts-config.xml文件中声明:

<plug-in className="org.apache.struts.tiles.TilesPlugin" >

    <set-property property="definitions-config"

                          value="/WEB-INF/tiles-defs.xml,

                            /WEB-INF/tiles-tests-defs.xml,/WEB-INF/tiles-tutorial-defs.xml,

                            /WEB-INF/tiles-examples-defs.xml" />

    <set-property property="moduleAware" value="true" />

    <set-property property="definitions-parser-validate" value="true" />

  </plug-in>

l         definitions-config:(可选)

指定配置文件的名称。可以有多个文件名,之间用逗号隔开。

l         definitions-parser-validate:(可选)

指定XML解释器是否验证Tiles的配置文件。

true::验证。DTD应该在文件开头指定(默认情况)

false:不验证。

l         moduleAware:(可选)

指定Tiles的定义池是否已模块对应化。如果是true(默认),对应每一个Struts模块都有一个定义池。如果是false,就会有一个为所有模块共用的定义池。对应后者,仍然需要每一个模块都对应定义一个plug-in插件。定义池将要以在第一个plug-in插件(一般是与默认的模块相关联的那个插件)中发现的参数值来初始化定义池。

true:Tiles框架是模块对应。

false:Tiles框架在所有的模块中只有一个共用的定义池(默认)。

l         tilesUtilImplClassname:(可选——高级用户使用)

指定所用的TilesUtil的实现的类名。指定的类应该是TilesUtilStrutsImpl类的子类。这一项使moduleAware选项失效。

指定 "TilesUtilStrutsImpl"相当于moduleAware = false。

指定 "TilesUtilStrutsModuleImpl" 相当于moduleAware = true.

当首次遇到这一项时,它被执行,并且只被执行一次。为了避免出现问题,建议在所有的TilesPlugin声明中都用相同的值。

TilesPlugin类为每一个Struts模块创建了一个定义池。

如果moduleAware处于false状态,那么就为所有的模块创建一个共用的定义池。对于后者来说,定义池就会以在第一个plugin中发现的参数来初始化。在每一个模块中应该声明对应的plugin,并且在整个应用程序当中,moduleAware都应该处于同一状态。

Tiles中的路径都是相对于main context来说的。

你不必指定具体的TilesRequestProcessor,plug-in会自动处理,然而,你想指定你自己的RequestProcessor,那么它应该继承自TilesRequestProcessor。plug-in会检查这项约束。

5.定义文件的语法

定义文件的语法可以在tiles-config_1_1.dtd文件中找到。

下面是一个简单的例子:


<!DOCTYPE tiles-definitions PUBLIC

       "-//Apache Software Foundation//DTD Tiles Configuration//EN"

       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

<!-- Definitions for Tiles documentation   -->

<tiles-definitions>

  <!-- ========================================================== -->

  <!-- Master definition                                          -->

  <!-- ========================================================== -->

  <!-- Main page layout used as a root for other page definitions -->

  <definition name="site.mainLayout" path="/layouts/classicLayout.jsp">

           <put name="title"  value="Tiles Blank Site" />

           <put name="header" value="/tiles/common/header.jsp" />

           <put name="menu"   value="site.menu.bar" />

           <put name="footer" value="/tiles/common/footer.jsp" />

           <put name="body"   value="/tiles/body.jsp" />

  </definition>

  <!-- ========================================================== -->

  <!-- Index page definition                                      -->

  <!-- ========================================================== -->

    <!-- This definition inherits from the main definition.

           It overloads the page title and the body used.

           Use the same mechanism to define new pages sharing common

           properties (here header, menu, footer, layout)

         -->

  <definition name="site.index.page" extends="site.mainLayout" >

           <put name="title"  value="Tiles Blank Site Index" />

           <put name="body"   value="/tiles/body.jsp" />

  </definition>

</tiles-definition>

 
6.调试 (Debugging)


若想调试由Tiles组建的页面,可以遵循下面的建议:

l         独立的检查每一个Tiles。直接访问那些嵌套的Tiles来测试它们是否运行正常。
是Tiles日志生效,详情请查阅commons-logging包的帮助文件。

 


转自:http://www.moon-soft.com/doc/14875.htm

分享到:
评论

相关推荐

    SpringMVC使用tiles

    1. **Tiles简介** Tiles框架的核心概念是“定义-使用”模式。定义是指创建一个页面模板,其中包含可替换的部分(称为“部件”),然后在实际页面中使用这些模板和部件。这样可以方便地管理页面结构,使多个页面共享...

    struts中tiles标签简介

    ### Struts 中 Tiles 标签详解 #### 一、引言 在Web开发领域,尤其在使用Struts框架时,为了提高代码复用性及页面布局的灵活性,开发者经常使用到一个非常有用的工具——Tiles框架。Tiles框架允许我们通过组合可...

    spring tiles

    #### 一、Spring与Tiles框架简介 **Spring**是一个轻量级的Java开发框架,主要用于简化企业级应用的开发过程。它提供了强大的依赖注入(DI)功能,使得开发者能够轻松地管理和组织应用程序中的各种组件。 **Tiles*...

    Struts2 tiles操作例子

    Struts2与tiles插件简介 Struts2的核心优势在于其灵活性和可扩展性,它允许开发者使用各种不同的技术来构建Web应用,如JSP、Freemarker等。tiles插件通过提供一种机制来定义和管理页面的布局结构,使得页面设计...

    tiles 简明教程

    #### 16.1 Tiles框架简介 **Tiles框架**是建立在JSP的`include`指令基础上的一个扩展性更强的解决方案,其核心特性包括: - **创建可重用的模板**:允许开发者定义一系列通用的布局模板,并将这些模板应用于多个...

    apache tiles3.0

    一、Apache Tiles 3.0简介 Apache Tiles的主要目标是通过定义和重用页面模板来简化Web应用的视图层开发。Tiles 3.0在此基础上进行了优化,提高了性能和易用性,同时保持了与早期版本的兼容性。这个版本引入了一些新...

    objTo3d-tiles.rar

    一、3D Tiles格式简介 3D Tiles是一种基于云计算的分块结构,通过将大规模3D地理空间数据分割成小块(Tiles),实现了按需加载和动态优化,大大提升了大规模3D场景的渲染效率。这种格式特别适合在WebGL环境中显示...

    Tiles框架.pdf

    Tiles框架简介 在Web应用程序开发过程中,为了确保网站的一致性和用户体验,经常需要让所有网页保持相同的外观,例如统一的布局、页头(Header)、页尾(Footer)和菜单(Menu)。这种需求在传统的JSP页面中往往...

    first_struts_tiles_tutorial.pdf

    - **Struts 2 简介**:Struts 2 是一款基于 Java 的企业级应用框架,它支持多种插件扩展,包括 Tiles。 - **集成 Tiles**:在 Struts 2 中使用 Tiles 需要在 `struts.xml` 文件中配置 Tiles 插件。 - **示例**: `...

    Live Tiles 与消息推送

    #### Tile 简介 Live Tiles 可以被看作是应用程序的一个快捷方式,它们有两种形态:静态和动态。静态 Tile 显示固定不变的信息,而动态 Tile 则能够根据实时数据自动更新显示内容,如天气、新闻摘要等。此外,Live ...

    cesiumjs瓦片数据 3dtiles

    #### 一、CesiumJS简介 CesiumJS是一种基于WebGL的开源JavaScript库,它为开发者提供了构建高性能地理空间三维应用程序的能力。通过利用现代浏览器的强大图形处理能力,CesiumJS可以实现在网页上进行复杂的三维地形...

    three-tiles:用 libGDX 制作的名为 Three Tiles 的简单游戏

    一、libGDX简介 libGDX提供了丰富的库和工具,让开发者能够轻松地实现2D和3D游戏开发。其核心特性包括图形渲染(包括OpenGL ES 2.0支持)、音频处理、输入处理、文件I/O和网络通信等。此外,libGDX还提供了跨平台的...

    tiles2-plugin:自动从code.google.comptiles2-plugin导出

    - `README.md`:项目简介和使用指南。 通过深入研究这些文件,开发者可以了解插件的工作原理、如何安装和使用,以及如何将其整合到自己的项目中。对于使用Tiles2框架的Java开发者来说,这个插件可能是一个宝贵的...

    MODIS数据的简介和下载.pdf

    MODIS数据,即中分辨率成像光谱辐射计数据,是目前全球遥感领域的重要数据源之一,主要来源于MODIS传感器,该传感器搭载在Terra和Aqua卫星上。MODIS传感器的全称为中分辨率成像光谱仪(Moderate-resolution Imaging ...

    3DTiles-社区标准-中文版.pdf

    ### 3DTiles社区标准简介 #### 一、前言 3DTiles作为一种高效的数据格式与渲染技术,被广泛应用于三维地理信息系统(GIS)及三维可视化应用中。它旨在为互联网提供一种轻量级且高效的三维空间数据表示方法,使得大...

    3D模型研究

    #### 二、3D模型格式简介 ##### 1. PLY (Polygon File Format or Stanford Triangle Format) PLY是一种用于存储三维模型数据的文件格式,它支持多种几何信息,如顶点位置、颜色、纹理坐标等,并且可以存储多边形或...

    hessian例子

    ### Hessian协议简介 Hessian协议是基于HTTP的,它通过二进制编码来提高数据传输效率,相比于XML或JSON等文本格式,Hessian在数据量和传输速度上有显著优势。Hessian协议支持基本类型(如整型、浮点型、字符串等)...

    isoedit:等距游戏的Tilemap编辑器

    在等距游戏中,地图通常由一个个小的正方形瓦片(Tiles)组成,每个瓦片代表地图上的一个单位面积,这些瓦片按照特定的规律排列,形成等距的视觉效果。 ### 2. `isoedit`简介 `isoedit`是一款基于Python开发的开源...

Global site tag (gtag.js) - Google Analytics