入门
本教程讲述如何使用 Tiles 框架来创建可重用的表示组件。(在最初创建它时,Tiles 框架被命名为 Components。 后来改变了名称是因为“components(组件)”代表了太多不同的东西,不过原先的名称的精髓仍然得到了保留。) 然而,除了站点布局之外,使用 tile 还能做其他许多事情。例如,您可以划分表示层以更好地重用布局、HTML以及其他可视组件。
本教程力图揭示使用 Tiles 框架的基础,然后让您的知识再上一个台阶。当完成本教程的学习时,您将能够使用更高级的 Tiles 特性来创建可重用组件。
注意:贯穿本教程,我们交替使用术语 tile 和 页面,因为任何 Web 资源都可以是 tile。 一个 tile 布局代表一种特殊类型的 tile,即可以用来在它内部放置其他 tile。 一个 tile 布局可以用作另一个 tile 布局内的 tile。
明确地说,本教程:
- 定义 Tiles 框架和体系结构。
- 介绍 Tiles 体系结构以及它是如何与 Struts 集成的。
- 澄清一些关键 Tiles 概念。
- 展示如何生成 tile 以及将 tile 用作站点模板。
- 展示如何使用 XML 和 JavaServer Pages (JSP) 中的 tile 定义。
- 定义 tile 范围(scope)以及如何将对象移进和移出 tile 范围。
- 使用属性列表。
- 展示如何嵌套 tile。
- 展示如何生成 tile 以及将 tile 布局用作小型可视组件。
- 展示如何细分定义。
- 为 tile 创建控制器。
- 展示如何将 tile 用作
ActionForward
。
如果您发现自己在每个页面上都要编写三行相同的 JSP 代码,或者您想容易地定义复杂的模版布局,那么您就会从本教程中获益。
本教程假设您完全理解 Java 编程、MVC(Model-View-Controller,模型-视图-控制器)、Model 2 和 JSP 技术。虽然良好的 Struts 背景会让您从本教程中获得最大好处,不过只要您精通 JSP 编程,就应该能够理解本教程讲述的大多数内容。
为完成本教程的学习,您将需要:
- 符合 JSP 1.1、1.2 或 2.0 版的 servlet/JSP 容器。 Apache Tomcat 3.x 或更高版本是一个优秀的选择。注意:本教程的例子是使用符合 JSP 1.2 的容器来编写的。
- Tiles 框架。可作为Struts 1.1下载包的一部分或作为单独的组件从Tiles Web 站点获得该框架。
- 源代码。我已提供了两个版本:一个带 jar 文件的版本和为窄带用户准备的一个不带 jar 文件的版本。 Struts 附带了一个空 war 文件
struts-blank.war
(在webapps
目录下),它说明了您需要哪些配置文件和 jar 文件,以及通常将它们放在哪里。您将对本教程中的例子代码使用相同的结构。
请参阅参考资料以了解关于这些材料和附加参考资料的信息。
Tiles 框架和体系结构
Tiles 框架彻底揭示了 jsp:includes
内部的概念 ―― 从而允许您更灵活地创建可重用的页面。使用 Tiles 框架,开发人员能够通过组合可重用的 tile 来构建页面。您应该将 tile 看作是可视组件。
Tile 布局是允许在其上放置其他 tile 的特殊 JSP 页面。 Tile 布局控制了 tile 在页面上的放置位置。从许多方面看来,tile 布局都和模板布局类似。事实上,如果以前使用过 Struts,那么您会注意到 Tile 框架与模板自定义标签库向是后兼容的。
本教程中出现的术语初看起来可能有点难以招架,因此在更详细地讨论 Tiles 框架之前,让我们首先定义一些重要术语。
术语词汇表
- Tiles Struts 用来创建表示组件的模板框架。
- 页面 tile 布局包括的 Web 资源。
- Tile 同页面。
- 区域 tile 布局中插入其他 tile 的范围。 区域拥有诸如页眉、页脚之类的逻辑名称。
- Tile 布局 描述其他页面应该定位在何处的 JSP 页面。Tile 布局充当模板,定义了插入其他 tile 的区域。 一个 tile 布局可以是另一个 tile 布局的 tile。
- 定义 定义用于调用某个 tile 布局的参数。
从某些方面看来,tile 布局工作起来就像一个显示函数。要使用某个 tile 布局,可使用 tiles:insert
标签来调用它。调用 tile 布局时要向它传递参数。这些参数将成为该 tile 布局的属性;例如,参数将放入 tile 范围。
调用 tile 时传递的参数可以是其他 JSP 页面或 Web 资源,您可以将它们插入布局中的预定义位置(称为 区域)。参数还包含能够插入 tile 布局的字符串。事实上,可以将许多类型的对象作为参数传递给 tile。这些参数会成为仅对该 tile 可用的 tile 范围内的属性。
tile 范围 类似页面范围,因为 tile 范围比请求范围更特殊化。 tile 范围允许 tile 用户给 tile 传递参数(称为属性)。tile 范围允许您传递仅对该 tile 布局或 tile 可用的变量(称为属性)。 特殊自定义标签允许您将属性从 tile 范围复制到页面、请求、会话或应用程序范围,或者将属性作为包含的 Web 资源来显示。
有些编程语言,比如 C++、Visual Basic 和 Python,允许您向函数和方法传递默认参数。为进一步扩展这个显示函数,Tiles 框架还允许您向 tile 布局传递默认参数。为此,您必须定义一个 tile 定义 。 Tile 定义允许您定义 tile 的默认参数。Tile 定义(definition)可以在 JSP 代码或 XML 中定义。
像类扩展其他类一样,定义可以扩展其他定义。通过使用定义和 tile 布局,您能够创建可重用的显示组件。
可以结合 Struts 使用 Tiles,也可以在没有 Struts 的情况下使用 Tiles。要结合 Struts 使用 Tiles,您将使用 Struts 附带的 Tiles 标签库。 此外,Tiles 框架包括它自己的 RequestProcessor
,用于将 tile 布局作为 ActionForward
来处理――从而允许您转到 tile 定义而不是转到 JSP 页面。Tile 是通过在它的 RequestProcessor
中重写 processActionForward
来实现这点的。
典型的 tile 布局可能为页眉、页脚、菜单和正文定义矩形区域,如图 1 所示。
图 1 所示的区域可以映射到类似图 2 所示的某个 Web 站点。
注意,只需传递正确的参数,就能够容易地重新定义这个应用程序的可重用部分。 例如,雇员清单可能使用相同的页眉和页脚,但是使用不同的菜单和正文,同时仍然能够使用 tile 布局所定义的全部通用布局区域。 这样允许对不同的内容重用相同的 tile 布局。 与包括 HTML 标记不同的是,您将在标记中包括内容。
(前一篇)精通Struts:Tiles框架+Struts (后一篇) 掌握Tiles框架 (二)-- Tiles布局和定义