`
disankyo
  • 浏览: 42227 次
  • 性别: 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

分享到:
评论

相关推荐

    struts中tiles标签简介

    struts中tiles标签简介,Tiles框架可以令我们组合可以复用的Tiles来搭建网页。

    Live Tiles 与消息推送

    •终端用户体验 •Tile 简介 •多重 Live Tiles •从后台进程更新 Live Tile •消息推送

    tipboard, Tipboard In-House,美味,本地dashboarding系统.zip

    tipboard, Tipboard In-House,美味,本地dashboarding系统 Tipboard 简介Tipboard是一个创建仪表板的系统,用JavaScript和 python 编写。 它的widget ('tiles'在术语中) 与数据源完全分离,提供了很大的灵活性和...

    Spring API

    1. 简介 1.1. 概览 1.1.1. 使用场景 2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动...

    Spring中文帮助文档

    2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件 2.3. 面向切面编程(AOP) ...

    Spring 2.0 开发参考手册

    1. 简介 1.1. 概览 1.2. 使用场景 2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加...

    struts2标签库

    struts2 标签 国际化 文件上传 校验 ...struts2.0的标签库(简介) 用过struts1.x的人都知道,标签库有html、bean、logic、tiles, 而struts2.0里的标签却没有分类,只用在jsp头文件加上 就能使用struts2.0的标签库

    spring chm文档

    1. 简介 1.1. 概览 1.2. 使用场景 2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加...

    security-poc:使用Spring Security

    Spring简介 密码编码器 笔记 内存中(默认) 记忆体 在记忆中 委派 默认配置文件(不使用PasswordEncoder) 数据库 D B JDBC 没有 通过jdbcAuthentication方法(嵌入式DB的Maven依赖项) 客户服务 USER_SERVICE...

    Spring-Reference_zh_CN(Spring中文参考手册)

    1. 简介 1.1. 概览 1.2. 使用场景 2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP ...

    Struts2 in action中文版

    1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架 9 1.3.1 Struts 2简史 9 1.3.2 Struts 2概览:MVC模式 10 1.3.3 Struts 2的工作原理 12...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    内容简介 Struts 2 是Java Web 应用首选的MVC 框架。《深入浅出Struts2》对Struts 2 的工作机理进行了透彻的阐述。书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助...

    dreamweaver的各种组件

    IE Sliding Tiles 创建一个响应鼠标事件的自动弹出式下拉菜单,实例可见http://www.webmokey.com QuickTime Object 有了这个插件,您就可以在Dreamweaver中方便地插入QuickTime文件, 程序能自动调用相关的ActiveX...

    用于强化学习的 TIle Coding (CMAC):基于 CMAC 算法的线性瓦片编码函数逼近-matlab开发

    瓷砖编码的描述—— 这是一种网格风格的瓦片编码的实现。 在这里,我们提供了一个程序“getTiles”,它映射真实的变量到瓷砖列表。... 该代码基于 Sutton & Barto 所著“强化学习 - 简介”的随附材料。

    电子商城系统设计实习报告.doc

    与许多表示层技术/框架无缝集 成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等。便于测试——归功于IoC。 Spring MVC缺点: 大量的XML配置文件,太过灵活——没有公共的父控制器,没有内置的Ajax...

    Java语言基础下载

    配置Tiles框架 660 内容总结 661 独立实践 661 第三十三章:Struts标记库 662 学习目标 662 Struts标记库taglib介绍 663 Bean标记 663 逻辑标记 665 转发和重定向标记 668 HTML标记 669 显示错误信息的标记 673 其他...

    开源框架 Spring Gossip

    简介 Spring Inversion of Control Dependency Injection &lt;br&gt; 核心容器 Spring 核心容器实作了 IoC,BeanFactory 与 ApplicationContext 的运用是了解 Spring 的重点所在。 管理 Bean...

Global site tag (gtag.js) - Google Analytics