前 言 JSF(JavaServer Faces)是Java中用来构建Web应用的一种新技术。其规范是由JCP(Java Community Process)下的JSR-127专家组开发的。基于Servlet和JSP(JavaServer Pages),JSF通过提供下列特性解决了Web开发过程中的许多实际问题,从而使开发过程更加快速: ● 现成可用的并且可扩展的用户界面(UI)组件 JSF程序员可以直接使用能够自动在客户端浏览器呈现相应HTML标记的界面组件,而不必费时间自己输出这些标记。而且这些组件是可扩展的。 ● 方便的页面导航 所有真正的Web应用都不仅只包含一个页面,JSF通过简单的配置就能提供页面之间的导航功能。 ● 输入验证器 在Web应用的开发过程中,编写代码验证用户输入的正确性是一个很费时的工作。JSF提供了现成的标准的输入验证器来解决这个问题;而且,如果已有的验证器不能满足您的要求,还可以通过扩展已有组件来创建一个定制的输入验证器。 ● JavaBean管理 JSF自动管理页面里不同作用域的JavaBean实例。 ● 事件处理 JSF是事件驱动的。熟悉Swing的开发人员会发现JSF和Swing很相似。事件驱动可最大限度地支持代码的重用和代码的可维护性。 ● 方便的错误处理 JSF提供了完善的错误处理机制。 ● 国际化支持 JSF支持Web应用的国际化和本地化,从而可建立同时适合不同国家、不同背景的使用者的站点。 注意: JSF被设计为也可以和其他技术一起工作,比如Portlet,但本书着重讲的是怎样使用JSF来构建Web应用。 SUN微系统公司已经提议将JSF作为构建JavaWeb应用的首选技术。鉴于它对快速开发及代码可维护性的良好支持,很自然的,我们可以预见JSF将很快变成首选的框架。而且会有一些新产业兴起以满足JSF编程人员的需要,比如开发JSF组件及开发构建JSF应用的辅助工具等。 注意: JSF官方网站的地址是:另外,可从获取JSF 的一个开放源码版的实现。 本书读者对象 本书讨论了使用JSF进行Web应用开发的各个方面。适合的读者对象有: ● 需要利用JSF的UI组件来设计JSF页面的页面作者。 ● 负责为JSF应用编写业务逻辑的JSF应用开发者。 ● 想要创建可重用组件的组件编写者。 ● 正在寻找用来构建可伸缩的JavaWeb应用的最佳技术的J2EE架构师。 ● 需要跟踪了解新的、令人振奋的Java技术以备使用的IT管理者。 软件要求 JSF应用本质上还是servlet应用。它需要一个Web容器。基本上,可以使用任何符合Servlet 2.3或2.4规范的容器,比如Apache软件基金会的Tomcat)。为了让JSF应用能够工作,需要包含在Java Web Services Developer Pack(当前版本是1.3)的JSF参考实现。当下载并安装了它以后,就会找到一个jsf目录,在此目录里有一个lib子目录,这个目录里包含了JSF应用所需的全部.jar文件。需要把这些文件复制到Web应用的WEB-INF/lib目录下。下面是这些.jar文件的清单: ● jsf-api.jar 包含Faces servlet和javax.faces包里的相关类。 ● jfs-ri.jar JSF的参考实现。 ● jstl.jar和standard.jar 使用JSP标准标记库(JSP Standard Tag Library, JSTL)里的标记需要这两个文件,另外JFS参考实现也引用到其中的类。 此外,JSF应用还需要Apache Jakarta项目中的下列库文件: ● commons-beanutils.jar 用来定义和访问JavaBeans组件属性的工具类。 ● commons-digester.jar 此库文件包含Apache Common Digester类。 ● commons-logging.jar 一个通用的、灵活的日志工具。 本次发行的JSF在Java 2 SDK的多个版本(标准版1.3.1 04,1.4及1.4.1)的多种配置上进行了测试,主要包括下列平台及浏览器: ● Solaris 2.8 ● Solaris 2.9 ● Windows 2000 ● Windows XP ● RedHat Linux 7.2 ● Netscape 6.x ● Internet Explorer 6 示例应用和代码清单 本书中所用到的所有JSF应用和代码清单都可以从作者的网站下载得到。测试某一章随带的应用是很容易的,简单地将应用复制到Web容器即可。每个应用的名称都是和相应的章节对应的,比如,JSFCh01是第1章随带的应用,JSFCh05是第5章随带的应用,依此类推。第2章展示了3个示例应用,这些应用命名为JSFCh02a、JSFCh02b和JSFCh02c。 下载的示例应用中没有包含所需的JSF库,需要从Java Web Services Developer Pack中单独下载它们,下载后,把它们复制到每个示例应用的WEB-INF/lib目录中即可。 本书提供的所有应用都是基于JSF 1.0版的Early Access 4的。更新和勘误也同样可以从作者的网站得到。 本书的技术编辑James Holmes编写了一个漂亮的Swing应用,能够帮助您管理JSF应用,可以用这个网址:从他的网站下载这个工具。 章节概况 下面是本书结构的概况。 第1章:底层技术 本章是供那些需要复习servlet和JSP编程技能的读者使用。它介绍了servlet、JSP技术以及JavaBeans、定制标记和Model 2体系结构。要读懂本书的其他章节,需要先理解本章的主题。 第2章:JavaServer Faces简介 本章开始逐步接触JavaServer Faces技术。并且教您编写第一个JSF应用程序来感受这种技术是如何工作的。除了示例应用以外,本章还为下一章作准备,并且简短地讨论了JSF的应用程序编程接口(Application Programming Interface,API)。另外,本章还讨论了用来配置JSF应用的应用配置文件。 第3章:用来处理请求的对象 作为一个servlet/JSF开发人员,您肯定熟悉ServletRequest和ServletResponse对象以及ServletContext和ServletConfig对象。在JSF里,一般不直接访问这些对象,它们都被封装在FacesContext对象里,此对象是本章的重点。除了FacesContext以外,本章还讨论了其他一些基本对象,比如ExternalContext、Tree及Application等。了解这些对象是为您的JSF应用编写高效的代码的关键。 第4章:JSF的UI组件模型 JSF里随带了现成的UI组件。本章解释了javax.faces.component包中表示UI组件的成员。特别值得注意的是UIComponent接口,任何UI组件都必须实现此接口。另外,本章还讨论了UIForm、UICommand、UIOutput、UIInput及UIPanel等。 第5章:使用简单的组件 本章和第6章展示了如何在JSF页面里通过定制标记来使用UI组件。本章展示的是比较简单的组件,如UIForm、UICommand、UIOutput及UIInput等,其他的一些高级控件将在第6章讨论。 第6章:使用高级组件 本章是第5章的延续,主要涵盖了一些表示高级UI组件的定制标记的使用,如UIPanel、UISelectItem、UISelectMany及UISelectOne等。 第7章:事件处理 JSF是事件驱动的,因此,构建JSF应用意味着开发过程中的相当一部分时间是用来编写事件处理程序。本章展示如何在JSF中捕获事件并处理它们。 第8章:页面导航 本章通过使用应用配置文件的navigation-rule元素,展示了如何容易地管理页面导航。本章涵盖了页面导航的各个方面,从简单导航到有条件的导航。 第9章:验证器 JSF提供的最有用处的特性之一就是验证器。顾名思义,使用验证器来验证用户输入的值。本章教您如何使用标准验证器以及在已有验证器不能满足需要时如何编写定制验证器。 第10章:转换器 数据转换是一个需要特别注意的高级主题,而JSF的数据转换实际是在请求处理过程中自动进行的。本章将您的注意力引向数据转换,并教您编写定制的转换器。 第11章:国际化和本地化 JSF支持国际化和本地化,本章解释如何创建支持多种语言的网站及如何充分发挥JSF的国际化及本地化支持的作用。 第12章:Renderer 页面里的UI组件需要呈现出来,就是说要把它的状态在客户端展示出来。在一个Web应用里,这意味着向浏览器发送HTML标记。关于此问题有两种编程模型可用:直接实现和委托实现。本章讨论这两种模型并解释如何创建您自己的Renderer。 第13章:定制组件 本章提供了编写定制UI组件的完整指南,这是一个高级主题,但本章从最简单的组件入手以减小学习过程的难度。此外,除了讲解相关类以外,本章还展示了一些高级的定制组件。 第14章:在线商店应用 本章展示JSF怎样用于实际应用,讨论了一个叫做BuyDirect的应用,这是一个使用JSF技术构建的在线商店。虽然它还不是一个完整的解决方案,但已足够展示一个在线商店的基本功能,比如搜索、浏览及购物车等。 第15章:应用配置文件 JSF应用可以通过应用配置文件轻松配置,本章展示了所有可以出现在应用配置里的元素。 第16章:JSF是如何工作的 第2章只简短地介绍了JSF的工作原理。现在,在熟悉了JSF的所有特性以后,可以做一些更深入的了解,本章就进行了展示。 第17章:JSP 2.0表达式语言 本章展示了JSP 2.0里一个可以大大改进您的JSF应用的新特性:表达式语言(expression language, EL)。在这一章里详尽地讨论了EL及如何将其与JSF的定制标记联合起来一起使用。 第18章:用于格式化的JSTL库 有经验的JSP程序员使用JSTL(JSP标准标记库)来加快JSP页面编写工作,本章讨论JSTL里有助于编写JSF页面的那一小部分。 附录A:Tomcat 5的安装 想要运行JSF应用的话,需要一个符合Servlet 2.3规范的容器来容纳它,Tomcat就是这样的一个容器。事实上,Tomcat是最流行的servlet容器,而且它还是免费并开放源码的,这也是选中它作为本书中所有JSF示例应用的容器的原因。本附录展示如何安装和配置Tomcat 5。 附录B:Web部署描述符 JSF应用事实上也还是servlet应用,同样,它也可以利用部署描述符(web.xml文件)来为应用设定不同的设置。本附录展示了用于Servlet 2.3的部署描述符。