前言
本书是笔者在过去两年多的时间里,从事基于JSF和RichFaces开发的工作总结和心得。作为一名开发人员,能有机会和同行分享技术,笔者非常珍惜和欢喜。故而在动笔之前告诫自己要珍惜每一页纸,使用简练的语言讲述更丰富和更深刻的内容。
书中的每个技术点都提供了笔者的经验之谈和详实的示例;与此同时,在示例的文字部分笔者对代码做了斟酌处理,以示例说明,而将完整的代码内容放到了本书的源代码部分中。目的是使本书物有所值,相信读者能体会其中的良苦用心。本书使用的JSF版本为2.1,RichFaces版本为4.2.1。这份源代码会有后续更新,目的是保证其时效性和精准性。一本技术书籍纵然是经典,也有很强的时效性,有时软件版本的升级会给讲解的软件版本已经陈旧的书籍带来灭顶之灾。因此日后笔者会在JSF和RichFaces升级后,及时提供更新的源代码,以延长时效性。对于精准性,每个人都会犯错。笔者实是庸才,必然鄙陋之处甚多。但笔者可以保证的是一旦发现源代码中有错误,将会在第一时间更新源代码。若是书中文字有误,会在源代码中附上勘误表。如果读者有兴趣,可以使用git通过gitHub管理的项目来更新本书源代码。当然你也可以通过浏览器访问并直接下载,附录A中有关于本书源代码的详细说明。
本书是本经验谈,笔者竭尽全力并毫无保留地收录了两年多来一线工作中使用JSF和RichFaces的经验和教训。希望能使读者少走弯路,快速掌握这门技术。传递经验主要传递的是学习方法,笔者在编写本书时常问自己,一个新手如何能尽快学习繁多的组件?首先是归类,一旦脑海中对一件事物有了清晰的分类,就会快速各个击破;其次是统一,人们习惯在做一件新的事情时采用已有的经验作为锚点,因此笔者将使用如下统一的方式讲述每一个组件。
(1)介绍该组件的功能和相关组件。
(2)从感观上认识该组件。
(3)给出使用样例,使读者快速了解如何使用该组件。
笔者会在组件第1次出现时介绍一遍其公共属性,书中知识点重现时会有导读,以使读者减少重复阅读,提升阅读质量。笔者会将很多心得体会融入组件讲解之中,而不是简单地罗列其特性。
本书以JSF和RichFaces的特性为单位,逐一讲述其原理,以及基本和高级应用方法;同时,由点到面以3个环环相扣的示例为牵引,希冀读者融会贯通。
本书不是JSF和RichFaces的API大全或者速查手册,因此不会罗列每一个组件的每个属性,而是从实用角度讲述组件的常用和重要的技术点,读者能看到的是如何最快并最准确地使用JSF和RichFaces。
本书只关注JSF和RichFaces,如果必须交代相关技术,则将其收录在附录中。读者看不到庞杂的内容,笔者希望为读者提供一个简单且精力集中的学习氛围。
笔者最大的心愿就是让本书成为读者有机会还愿意回头再翻翻的书籍。
面向读者
本书面向的读者需要至少了解如下知识。
(1)Java的基本使用方法、Eclipse和Tomcat的初级使用经验。
(2)HTML基本常识,包括CSS和JavaScript的基本常识。
读者最好具备的知识储备为Servlet和JSP开发经验,以及http协议和Ajax基本常识。
阅读指南
本书包括3个部分共7章。
第1部分是入门,分3章引领读者走进JSF和RichFaces。
第1章介绍JSF和RichFaces,并说明如何开始用其开发项目,读者可通过第1个实例学习如何快速地开发一个Web项目。
第2章从JSF的组件讲起,这是因为JSF是面向组件开发的。然后介绍JSF的Facelet视图和模板,这部分将展现JSF的快速开发和高度复用特点。接下来说明容器管理,读者可从中了解JSF页面和Java类之间的联系。最后讲解JSF的转换器和验证器等功能性组件,以及JSF的脚本库。
第3章从RichFaces的组件讲起,读者从中可以清晰地了解RichFaces组件的强大和易用性。然后讲述RichFaces对JSF的增强,并针对RichFaces 3.3.3升级到RichFaces 4.x提供指导性说明。在本章最后读者可看到一个全面使用JSF和RichFaces基本功能的示例,其中引入了许多笔者实际的技术成果。
第2部分讲解原理,其中只有一章,是本书的核心章节和笔者漫长的学习过程中总结的结晶。本章讲述JSF如何工作,以及RichFaces如何与JSF结合并扩展。
第3部分是进阶部分,分为3章来讲述JSF和RichFaces的高级应用,其中的内容对实际开发项目更有指导意义。
第5章展现JSF自定义组件的能力,其中第1节从原理上讲述如何自定义一个组件;第2节讲述JSF 2.0推出的composite component,这是一种使用Facelet页面定义组件的方式,其特点是快捷和易用;第3节讲述如何使用RichFaces提供的自定义组件工具CDK来创建组件。3个小节都提供了示例,方便学习。
第6章首先讲述如何利用JSF提供的配置参数调优性能,接下来讲述RichFaces的性能调优。然后讲述JSF错误处理机制,最后是锦上添花的皮肤、主题的使用,这部分对提升用户体验很有意义。
第7章收录了笔者在基于RichFaces开发中总结的实用技术,以及笔者开发、维护和使用近两年的JSF实例知识管理系统(KMS),希冀这一示例使读者在推敲过后掌握JSF和RichFaces。
感谢
首先要感谢RadVision(现在是Avaya视频部门)的架构师张国锋老师。张老师很有前瞻性地领导了我们研发部门的技术革命,使得我有机会学习和使用JSF和RichFaces。还要感谢博文视点的孙学瑛老师,没有孙老师的帮助,也就没有此书。最后感谢妻子Caroline,我写此书时她正怀着我们的女儿Doris,此间我们克服了许多困难才使得我完成本书。因此,是我们共同孕育了我们的孩子还有这本书。
学习是一种生活习惯,很多人走出校园后因为种种原因慢慢失去了这个习惯,也因此丧失了对新事物的热爱。作为一名开发人员,学习是一种生存习惯。学习会贯穿职业生涯的始终,甚至是毕生。学习,对于开发人员不是一种技能,而是一种情怀。我们不会因为掌握了一门新技术而骄傲,我们会产生发自心底的欣慰。
笔者才疏学浅,疏漏之处祈盼读者不吝指教。