Java
作者: Peter Zadrozny,甲骨文公司
2005 年 4 月
在努力使 J2EE 变得更简单的过程中,Oracle 一直在一个称为 ADF (Application Development Framework) 的框架中提供 J2EE 最佳实践,例如设计模式和应用程序基础架构。ADF 真正令人感兴趣的地方是的平台无关性,即它可以在任意符合 J2EE 规范的应用服务器上运行。更好的是,您可以根据需要选择任意一个 J2EE 层和开发生命周期阶段,而不用面临要么全部使用要么什么也不能用的痛苦选择。
Oracle ADF 基于模型-视图-控制器 (MVC) 设计模式。在本文中,我们将仅集中讨论提供应用程序用户界面的视图层。视图层使用了各种标记语言来呈现用户界面,它可以是基于 web 的、基于客户端/服务器的、无线实施、甚至基于 telnet 的。本文的焦点集中在 JavaServer Faces (JSF) 上。JavaServer Faces 也称为 Faces,它不仅提供了一个视图层,还提供了导航功能(与 Struts 的导航功能类似)和称为后端 bean 或受管理的 bean 的组件,您可以把业务逻辑以及与数据源的交互放在这些 bean 中。仅利用这些您就可以开始构建应用程序了,这是因为 Faces 本身就是 MVC 框架。
Faces 真正的力量来自于其组件。其理念是您不必在每次需要用户界面功能时都从头开始编写。相反,您只需使用相应的组件,这样您就不必摆弄标记语言了,并且它使您与 HTTP 分离。尽管编写 JSF 组件会很困难,但使用这些组件就简单到只需调用标记就可以了。这正是 Faces 的优势和绝妙之处。想象一下,有一群人在提供能够满足您几乎任何需要的 Faces 组件。您不需要编写用户界面代码,只需使用 Faces 组件即可。
Faces 组件有一个有趣的体系结构,该体系结构基于职责的明确划分。组件本身定义组件的行为或功能,而呈现器则描述表现方式。例如,您可以让一个组件限定用户只能选择一个选项,而在呈现器中定义其实现方式,如单选按钮或下拉式菜单。您可以将呈现器划归到不同的呈现工具包中,这样您就可以有一个用于 HTML 的呈现工具包和一个用于 WML(移动电话)的呈现工具包了。该组件的逻辑保持与显示它的设备无关。
按照这个群体的思路,Oracle ADF 包含了 100 多个 JSF 组件 ( ADF Faces),这些组件为最终用户提供了非常丰富和强大的体验。这些组件包括可以用各种方式导航的颜色选择器、值列表和日历,以及一些相当复杂的组件,如具有列排序、隐藏/显示功能的表格和可以层次结构显示数据的树组件。
并非所有 ADF Faces 组件本质上都是图形化的。也有一些组件更偏重于简化用户交互,如文件上载组件。ADF Faces 还有一种特性,它专门为建立用户对话框而设计,而且它能够返回用户启动对话框的位置(并非总那么容易做到这一点)。

图 1:使用中的 ADF Faces 对话框框架
所有这些组件目前都使用 HTML 和 WML 作为标记语言,因此可以将它们无差别地用在普通浏览器或移动电话或 PDA 上。不过,Oracle 正在通过添加 DHTML 和 JavaScript 的支持组合来改进这些组件呈现器,这将提供甚至更加丰富的用户体验,包括部分页面呈现。这个新的呈现工具包(称为富客户端)是如此强大以至于几乎没有必要再使用 Swing 了。

图 1:ADF Faces.NEXT,一个更丰富的组件集
此外,ADF Faces 还有一个用于 telnet 设备的呈现工具包。您可能纳闷为什么要提供这种工具包 — 目前存在的众多 telnent 设备本身就足以做出解释了。大多数工厂和仓库都使用这种类型的设备,而且每天都在使用。

图 1:使用中的 ADF Faces Telnet 呈现工具包
终于我们在 Java/J2EE 世界中有了一种简单的方式来创建丰富、强大的用户界面。Servlet 和 JSP 实际上没有为我们提供很多可以使用的特性,而 Swing 的特性太多了以致于使用起来非常麻烦。正如您所看到的,Faces 组件非常出色,而 Oracle ADF Faces 提供的组件是一个很好的起点。好好享用吧!
有关 JSF 和 Oracle JDeveloper 10g (10.1.3) 开发人员预览版的详细信息,请访问 Oracle 技术网上的 Oracle JDeveloper 主页。