将三种技术的功能、灵活性和可治理性集成到一起
级别:高级
Srikanth Shenoy (srikanth@srikanth.org), J2EE 顾问, Objectseek Inc.
Nithin Mallya (nithin@mallya.org),J2EE 顾问,Objectseek Inc.
2003 年 10 月
您是否想将 JavaServer Faces (JSF)的强大前端功能、Tiles 的内容格式编排优势和 Struts controller 层的灵活性都加入到您的 J2EE Web 应用程序中?企业级 Java 专家 Srikanth Shenoy 和 Nithin Mallya 为您展示了如何将这三者的功能集成到一起。本文演示了如何在 Struts-Faces 集成库中定制类以使得它们可以与 Tiles 和 JSF 一同使用,并用一个实际的例子解释了这个过程背后的基本原理以及如何使用新的一组类的细节。
将 Struts、Tiles 和 JavaServer Faces (JSF) 一起使用,开发人员可以实现易于治理和重用的、健壮的、界面清楚的 Web 应用程序。
Struts 框架推出已经有一段时间了,它已经成为在开发 J2EE Web 应用程序时开发人员所采用的事实上的标准。Tiles 框架是在 Struts 之后不久出现的,它通过为开发人员提供用组件组装展示页面的能力开拓了自己的生存环境。JSF 是 Web 应用程序框架中最新的成员,它提供了验证用户输入和处理用户事件的机制,最重要的是,这是一种以协议无关的方式呈现用户界面组件的方法(有关这些 技术的概况,参见本文相关页面“The major players”)。
尽管 Struts 和 JSF 中有一些功能是重叠的,但是它们在其他方面起到了互为补充的作用。这三种技术的结合可以为开发 Web 应用程序、组织其展示和以协议无关的方式呈现定制的用户界面(UI)组件提供一种高效的途径。
为了运行本文中的示例代码,需要 Struts 1.1、Tiles、JavaServer Faces Reference Implementation (JSF-RI) Early Access Release 4.0 以及 Struts-Faces 0.4。Jakarta 项目提供的 Struts 1.1 发行版本将 Struts 和 Tiles 捆绑发布。还可以从 Jakarta 项目上下载 Struts-Faces 集成库。JSF-RI 是 Sun 的 Web 开发工具包(Web Services Developer Pack)的一部分(在参考资料中有这些下载和示例代码的链接)。
现在回到集成三种技术的细节上。首先有个坏消息:在本文发表的时候,这三种技术是不能直接互操作的。好消息是:在本文中,我们展示了集成 Struts、Tiles 和 JSF 的方法。我们假设您已经了解 Struts 和 Tiles。对 JSF 有一些了解会有帮助(参阅 参考资料中提供的 developerWorks 上的 JSF 教程的链接),但是不了解也不妨碍对本文的理解。
JSF 简介
JSF 应用程序是使用 JSF 框架的普通 J2EE Web 应用程序,JSF 框架提供了丰富的 GUI 组件模型,这些模型体现了真正的 GUI 框架内涵。您可能听人们说过,尽管某种技术不错,但是它的外观仍然需要改进。是的,用 Html 组件构建平淡无奇的页面的日子已经过去了,假如使用 JSF 的话,具有更高级 GUI 外观的日子就在眼前。您会问,怎么做呢?树形组件、菜单组件和图形是已经存在的 UI 组件,这些 JSF 一定要提供。更进一步,JSF 通过提供轻易使用的 API 鼓励创建自定义组件。
注: 这里所提到的 UI 组件是 Sun 提供的示例的一部分。像所有规范一样,实际的实现由不同的提供商完成。
在传统的使用模型-视图-控制器(MVC)的 Web 应用程序中,GUI 组件是由处理展示和业务逻辑的自定义标记所表示的。这样就出现了必须“编写与客户机设备打交道的代码”的问题,这会产生重复的代码。使用 JSF 就不会有这个问题。
JSF 结构将展示逻辑 (“什么”)与 UI 组件的业务逻辑 (“为什么”和“如何”)分离。通过在 jsp 页面中使用 JSF 标记,就可以将 renderer 与 UI 组件关联在一起。一个 UI 组件可以用不同的 renderer 从而以不同的方式呈现。特定于 UI 组件的代码在服务器上运行,并且响应用户操作所产生的事件。
JSF-RI 提供了一个 render kit,它带有一个自定义标记库,用以从 UI 组件呈现 HTML。它还提供了根据需要定制这些组件外观的能力。假如需要非凡的组件,那么可以为特定的客户机设备构造定制的标记并让它与一个子 UI 组件和定制的 renderer 相关联。对于不同的设备,您所需要做的就是指定不同的 renderer。
JSF 和 UI 组件