在后面的时间里,我会陆续的把我在 JSF 学习过程中的一些心得体会以及一些值得参考的代码拿出来,整理成 JSF Cookbook 系列,并逐步发布出来。当然在整理的过程中因为个人能力有限,难免会出现错误和遗漏,请高手多多指点,谢谢。只希望这些资料对大家学习JSF带来一些便利。因为个人时间有限,速度可能会有些慢,请大家原谅,也希望有兴趣的朋友也能投入到资料的编写过程中来。
该资料编写工作在我的论坛 http://www.js66.com/java 中进行,通常情况下我会在论坛中编写一定的数量的资料后,集中在这里发布,可能会有些延期,所以如果大家希望看最新版的资料,请到我的论坛来,如果你有这方面的疑问也可以到这里来寻求解答。
1.什么是 JavaServer Faces
问题:
你对JSF不了解,希望了解更多关于JSF的资料。
解决:
JavaServer Faces(JSF) 是一种标准的 J2EE 表示层的技术,其主旨是为了使 Java 开发人员能够快速的开发基于 Java 的 Web 应用程序。它不同于其它 Java 表示层技术的最大优势是其采用的组件模型,事件驱动,并且和其它的 MVC 框架相比,它是一种 Java 标准,在Java EE 5 中,JavaServer Faces 1.2 正式作为一个标准,加入 Java Enterprise 的世界。
作为一种高度组件化的技术,开发人员可以在一些开发工具的支持下,实现拖拉式编辑操作,用户只需要简单的将 JSF 组件拖到页面上,就可以很容易的进行 Web 开发了。这是其作为一种组件化的技术所具有的最大好处,我们能用的组件不光是一些比较简单的输入框之类,还有更多复杂的组件可以使用的,比如 DataTable 这样的表格组件, Tree 这样的树形组件等等。在 Ajax 盛行的今天,我们也可以通过 JSF 组件来简化开发人员的开发难度,使得 Ajax 能通过拖拖拉拉的操作方便的进入到我们的应用中去。作为一种标准的技术,JavaServer Faces 得到了相当多工具提供商的支持。同时我们也会有很多很好的免费开发工具可以使用,前不久 Sun Java Studio Creator 2 和 Oracle JDeveloper 10g 作为免费的支持 JSF 的开发工具发布,给 JSF 带来了不小的生气。另外我们也有一些很优秀的商业开发工具可共选择,BEA Workshop (原 M7 NitroX),Exadel,MyEclipse 这样的基于 Eclipse 的插件开发工具,为现在广大的 Eclipse 用户带来了不小的便利,IBM 的 Rational Application Developer 和 Borland 的 JBuilder 也是很不错的支持 JSF 可视化开发的商业开发工具,在后面我会用一节的篇幅简单的介绍一下这些工具。
传统的 Web 应用程序与桌面应用程序存在着许多本质上的差别,使得用户要手工的去捕获各种浏览器请求,保存客户端状态,并且手工控制着页面的转向,等等。JSF 的出现,无疑给我们带来了巨大的便利,JSF 提供了事件驱动的页面导航模型,该模型使应用程序开发人员能够设计应用程序的页面流。与 Struts 的方式向类似的是,所有的页面流信息都定义在 JSF 配置 XML 文件 (faces-config.xml) 中,而非硬编码在应用程序中。这很大程度简化了开发人员开发难度,简化了应用程序的开发。
同时JavaServer Faces 也是一种遵循遵循模型-视图-控制器 (MVC) 模式的框架。实现了视图代码(View)与应用逻辑(Model)的完全分离,使得使用 JSF 技术的应用程序能够很好的实现页面与代码的分离。所有对 JSF 页面的请求都会通过一个前端控制器 (FacesServlet) 处理,系统自动处理用户的请求,并将结果返回给用户。这和传统的 MVC 框架并没有太大的区别。
JavaServer Faces 是一种使用了 POJO 的技术同时在使用了类似 Spring 的控制反转(IoC) (或称为依赖注入-DI) 技术,在 JSF 的 Backing Bean 中,我们可以把视图所需要的数据和操作放进一个 Backing Bean 中。同时得益于 JSF 使用的 DI 技术,我们可以在配置文件中初始化 Managed Bean,同时我们也可以通过这样的技术很方便的和使用类似技术的 Spring 进行整合。
2.下载 JSF 的实现版本
问题:
你需要使用 JSF 来开发应用程序。
解决:
因为 JSF 1.1 是一个标准(JSR-127),所以会有一些不同的厂商和组织提供了自己的实现,目前比较流行的实现包括 Sun 的 Reference Implementation (参考实现,简称为 RI) ,Apache 软件基金会的 Myfaces, Oracle 的 ADF Faces (目前 Oracle 已经将其捐赠给 Apache 软件基金会下的 Myfaces 项目,成为它的一个子项目)。
分别提供了以上这些实现的下载地址,大家可以去下载 JSF 的实现版本,我们会在后面的介绍中用到这些包。
Sun RI : http://java.sun.com/j2ee/javaserverfaces/
Myfaces : http://myfaces.apache.org/
ADF Faces : http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/index.html
讨论:
因为 JSF 有了这么多种类的实现版本,大家或许会觉得有些疑惑,我该到底用哪个版本去开发呢?在我现在和以后的文章系列里面,我将会以 Apache Myfaces 1.1.1 的实现版本为例,来介绍 JSF 技术。
Struts 社区为了扩展 JSF,推出了 Shale 子项目,目的是为 JSF 提供大量的应用支持,它以 JSF 的实现为基础,提供了一系列方便易用的特性,包括有:Web Flow,Ajax,Tiles 的集成,客户端验证,并且提供了类似于 Tapestry 的视图和参数化的 SubTree 模型。虽然 Shale 到目前为之还没有一个正式发布的版本,但它在 2005 年 JavaOne 的 Web 框架评比中,在技术特性的评比中获得了 4.95 的高分,超越 JSF, Tapestry, Webwork, Struts 而独占鳌头。但是相信我们除了 JSF 标准外,很快会有这样一个更好的选择了。
记住,Shale 不是 JSF,而是对 JSF 的扩展,也正如 Struts 的创始人 Craig McClanahan 所说的“Shale 与 JSF 的关系,就像 Struts 与 JSP 的关系一样”。
[Last Update 2006-01-17]
posted on 2006-02-17 15:41
steady 阅读(2929)
评论(8) 编辑 收藏