首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

RichFaces 简介(1)

RichFaces 简介(1)

最近,一家客户委托我们实现一个项目,我认为这个项目非常棒。他们没有专职的开发人员,要求我们设计和开发他们的第一个生产应用程序,该应用程序包括一个服务器和一个浏览器客户机。该应用程序将在他们的局域网和 Internet 上运行,并且使用一个虚拟专用网(VPN)。对于我来说,经历一个项目从设想到实现再到培训的整个过程并不鲜见,但还是很少有机会自主地确定项目的几乎每个方面。这个项目的一个主要方面是,每个人都习惯于桌面应用程序。如果在浏览器用户界面中包括类似的特性,他们也许不会特别注意到,但是如果没有这些特性,他们肯定会有很多抱怨。例如,项目初始阶段的主页面将为动态查询收集选择标准。有些输入区需要客户端操作,至少有一个输入区需要 Ajax 功能。最后,我选择了 RichFaces 组件套,该组件套构建在 Ajax4jsf(参见 )之上,并与之合并。
选择组件本文的目的不是倡导某一个产品或组件套件,而是让您有足够的信息开始使用 RichFaces,并且有足够的背景知识,以便在开发自己的 RIA 或富 Web 客户机时能作出比较。我鼓励您尝试各种可能性,参考本文和其他文章,得出自己的结论。
一个很好的起点是 JSF AJAX Component Library Feature           Matrix(参见 )。请务必仔细阅读该页面底部的每条注解,因为这个模型很少更新,而这个专区经常发生变化。我自己的简短列表很快就减少到只有 RichFaces、Woodstock 和 IceFaces(见 )。

除了 Rich Internet Application(RIA)功能和 Ajax 外,我还需要:
  • 开源的 LGPL 或 Apache 形式的许可,如果可能的话
  • 使用 JSF 和 Facelets
  • 和 JSF Reference Implementation(RI)组件一起使用
  • 灵活但是一致的感观或主题
  • 足够大的组件集,以覆盖大多数应用程序需求
  • 易于使用,不会出现阻塞
  • 动态创建能力,有可用的 API
  • 活跃的开发和社区
到目前为止,RichFaces 已经能满足这些标准,这些组件在创建高效的、功能完备的应用程序方面已经显现出价值。您的标准依旧可能变化。
本文探索一些有用的 RichFaces 特性,并提供一个用于演示的应用程序代码(参见 小节)。不过,在讨论 RichFaces 之前,需要介绍一些必要的基础设施元素。
从头开始虽然在初始阶段客户的应用程序可以只使用一个        servlet 容器,但是将来会需要更多的支持,并且很可能要包括用于其他子公司的项目。为了尽量靠近标准,我选择开源的 Glassfish Application Server V2,它支持        JEE 5,并且使用 Java SE 6 作为底层运行时。至于 Web 框架,我选择 JSF         和 Facelets。一个额外的好处是,Java EE 5 中包括了 JSF 支持;对于        Glassfish V2、WebSphere Application Server Community Edition V2 等等,受支持的        JSF 版本是 1.2。JSF 2.0 的目标是获得 Facelets(或类似的)支持,最主要的 Facelets 开发人员都属于 JSF 专家组。
本文假设读者有这些方面的基础知识。示例代码下载小节包括了您需要的用于 Tomcat 6.0.16 和 Glassfish 的所有文件,并且这些文件都在这两者上经过测试。在线版本(参见        参考资料)在 Glassfish V2 上运行。如果您需要关于这些技术的更多背景知识,请参阅 ,并访问适当的链接。
并不是更小的 JSF 版本Facelets 并不像其名称那样表示一个小号的 JSF;相反,在其核心,Facelets 提供了 JSP 的替代品 JSF         ViewHandler,而这正是我在本文要使用的内容。当我第一次研究 JSF 时,我曾阅读过 Hans Bergsten 的文章 “Improving JSF         by Dumping JSP”(参见 )。之后不久,我就发现了 Facelets,此后就一味沉浸于此。Facelets 支持所有的 JSF         UI 组件,并且构建了它自己的组件树,以反映 JSF 应用程序的视图。虽然 JSP 和 JSF 技术已得到改进,如今可以更好地协作,但是 Facelets 完全消除了 Bergsten 的文章中提到的问题。
我喜欢让事情尽量简单而直接。在示例项目中您将看到,实际上所有代码(而不是标记)都是由用于 getter、setter 和方法绑定的 Expression Language(EL)表达式组成的。虽然更复杂的项目可能需要更复杂的表达式,但是通常情况下 Facelets 便于将 Java 代码与 Web 页面标记分隔开。
在这里您将注意到,这种开发与使用 JSP 的 “常规” JSF 开发的主要不同之处在于:
  • 您将需要 jsf-facelets.jar。
  • web.xml 和 faces-config.xml 中的一些标注。
  • Web 页面是 XHTML 文档。
  • 使用 XML 名称空间,而不是 JSP 标记库。
随着格式化的进行,不仅仅是初始部分(参见 ),Web 页面中的所有部分看上去都应该很熟悉。我将这个特性视为 Facelets 的一个朴素特性。对于本文的项目,以及将 Facelets 主要用于视图的其他项目,您实际上只需要知道这一点。Facelets 还包括很多其他有用的特性,例如为方便 Web 页面设计者而提供的简单的模板和元素。如果读者有兴趣了解更多关于        Facelets 的信息,建议从 “Inside Facelets Part 1: An Introduction”(参见 )入手。
清单 1. Facelets XHTML 文档的初始部分
1
2
3
4
5
6
7
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:h="http://java.sun.com/jsf/html" >

返回列表