JSF 2.0中有什么新功能呢? JavaServer Faces规范的1.2版本和2.0版本之间的变化是很重要的,这种变化比Java EE平台中任何两种相邻版本之间规范的变化都要大得多。由于变化如此之多,因此有一个很方便的参考手册对熟悉新功能而言是很重要的。这里主要对新的功能进行分类和剖析,通过这些功能可以直接找到相应的章节。所有JSF子系统的图形索引如图1所示。浅色阴影框表示的是JSF 2.0中全新的功能,深色阴影框表示的是在JSF 2.0中变化或加强的功能。方框的排放位置表明功能之间的依赖关系。如果功能相互依赖,但是方框却不能相邻,那么使用箭头表示这种依赖关系。 在接下来的内容中,这些功能按照复杂程度来衡量并进行分组,其中大的功能与小的功能相比较而言设计起来更为困难且更为重要。 基本功能 这些功能由专家组开发,使得JSF 2.0中的其他功能得以实现;然而,这些功能也是同样有用的,因此对公共API是可用的: ●系统事件 这个功能在JSF运行时处理请求,提供了细粒度级的观察和执行动作的细节。详细信息请参见第9章。 ●资源 这个功能使JSF运行时可以提供静态资源(如样式表、脚本和图像),此外,也可以像之前版本一样提供JSF页面。这些都将在第7章中进行介绍,并将在第10章中详细说明。 ●Facelets Facelets首先是作为一个开放源代码的JSF扩展,它提供了一流的模板,并且可以很容易地把标记和JSF API集成在一起。这使得编写JSF页面的过程变得越来越容易,并且可维护性也得到增强。Facelets包含在核心的JSF 2.0版本规范中,详细信息请参阅第4章。 大的功能 这些功能是“新规范推出的动因”,即在先前发布规范的基础上添加的新功能: ●Ajax 这个功能使得JSF视图可以通过浏览器与服务器直接进行交互,而不需要对浏览器窗口中的整个页面请求刷新。Ajax是当前大多数产品质量级Web应用程序的基本要素。这个功能的详细信息请参见第12章。 ●复合组件 该功能可以创建真正的JSF组件,作为其他JSF组件的聚合。具备这个功能后,构建用户自己定制的JSF组件是一件很容易的事,并且可以把已存在的视图转换成可重复利用的组件,从而完成侦听器、属性和事件。这个功能的详细信息请参见第11章。 ●部分状态存储 JSF最大的缺点之一是在请求之间要保存视图状态,这需要消耗大量的存储空间。这个功能用于解决上述问题,可以动态地减少存储空间,当开发定制组件时,也极大地简化了处理状态的API。详细信息请参见第11章。 ●视图参数 JSF另一个很大的缺点是:对于所有的跨页面导航而言都要不断地使用POST。这个功能的详细信息请参见第6章。 中等大小的功能 这些功能是那些优秀的JSF开发人员出于兴趣而开发的,并且也可以在先前的规范中扩展,但却并不是其核心功能。 ●导航能力增强 JSF 2.0引入了一些增强功能的导航,包括可定制的导航、没有XML导航规则的导航、有条件的导航、支持POST-REDIRECT-GET模式的导航、flash以及在运行时检查导航规则。这些功能的详细信息请参见第6章。 ●异常处理 JSF 2.0现在具备一个中央ExceptionHandler,通过这里时,所有的异常处理都会被筛选。这使得构建一个使用JSF组件的错误页面变得很容易。这个功能的详细信息请参见第10章。 ●表达式语言增强 引入了一些新的隐式对象,并且EL现在对任意的Java方法都支持方法调用,包括参数传递。这个功能的详细信息请参见第5章。 ●验证器 一个完整的新Java规范已经发展成为地址验证器,这是一种JSR-303 Bean验证器。这种规范在JSF 2.0中整合良好,详细信息请参见第8章。 ●新的作用域 除了在第5章中描述的flash作用域外,JSF 2.0还为声明定制作用域提供了一种机制。详细信息请参见第13章。 小的新功能 这些功能主要用于bug修复,在该规范的次要修订版本中无法修复这些严重的bug: ●现在可以在应用程序启动和关闭期间访问FacesContext。这个功能的使用请参见第10章。 ●UISelectItems是从UISelectOne中扩展得到的子组件,并且UISelectMany可以引用任意对象的集合。 ●JSF现在允许开发人员告诉运行时处于软件开发生命周期中的哪个阶段,即运行时正在执行哪个阶段。这个“项目状态”功能使运行时可以输出更多提示性的错误消息,并且在项目正在开发时做出提示。这个功能的使用将在第13章介绍。 ●内注可以避免对XML的需求。几乎每一个XML元素都可以保存在faces-config.xml文件中,现在可以使用Java语言内注来代替它。这种内注功能与“不需要XML导航规则的导航”相结合,可以在完全没有faces-config.xml文件的情况下构建JSF应用程序。有关内注的详细信息请参见第15章。 微小的新功能 这些功能用于充实新功能,并且包括一些简单的bug修复,这些bug修复已经整合到JSF 2.0规范发布中: ●关于新方法ExternalContext和FacesContext的详细信息,请参见第13章。 ●通过装饰设计模式来帮助扩展JSF的封装器,请参见第13章。 ●新的DataModel.iterator功能将在第10章中进行介绍。 ●有一些新的context-param设置,详细信息请参见第15章。 如果您是一个很有经验的JSF用户,那么可以使用新功能前的引导索引直接跳到这些新的资料。如果您是第一次接触JSF,那么并不需要了解JSF 2.0中的这些新功能,以及它们是如何从先前的版本中移植过来的。所有这些新功能都将很自然地展现在本书的内容中。事实上,我们认为,JSF 2.0保留了JSF一贯的风格。 本书深入阐述了如下内容: ●教程内容涵盖了JavaServer Faces技术的每一个方面; ●完全覆盖了JSF 2.0中的所有新功能,并且不是采用补充说明的方式,而是完全“按照JSF 2.0应用使用的说明方式”进行阐述; ●图形索引快速展示了在JSF子系统中的什么地方可以迅速找到信息; ●JSF 2.0提示概述了JSF最新版本之间的差异以及如何最好地使用它们; ●专家组意见提供了技术背后的设计原理,让读者更好地理解在自己的工作中如何使用JSF; ●用多个示例详细阐述了定制用户界面组件的开发,包括JSF 2.0复合组件; ●完整地覆盖了JSF 2.0支持的标准Ajax; ●真实应用示例,包括支持POST、REDIRECT、GET,隐式导航以及可定制的JSF页面; ●扩展JSF框架的一个完整指南,如安全、移动渲染、本地化和表达式语言的增强; ●对Neil Griffin、JSF 2.0专家组的成员和Liferay Portal JSF团队领导人引入的JSF配置文件的一个完整指导; ●为规范的标准组件提供完整的参考和指导信息。 开发环境 当提供支持Java和JSF的IDE时,本书不要求读者使用任何特定的IDE。一个简单的基本开发环境应该包括: ●Java SE 6 ●一个Servlet 2.5的容器,如Apache Tomcat 5.x ●Apache Maven 读者如果尝试使用书中提到的代码示例,那么需要使用上述3种环境。运行JSF?2.0最简单的环境是Sun公司的Glassfish Application Server,网址为。 网上示例代码资源 整本书中经常引用网上的代码,有时候只是指明网址或者称之为“网上扩展”。书中的所有代码示例都可以在McGraw-Hill的网站上下载,网址为www.tupwk.com.cn/downpage网站下载。此外,本书自己的网站也提供可下载的源代码。