问:什么是 JavaServer Faces 技术?
答:JavaServer Faces 技术是一个构建 web 应用程序的用户界面的框架。JavaServer Faces 技术包括:
- 一组 API,用于表示 UI 组件并管理它们的状态、处理事件和输入验证、定义页面导航、并支持国际化和可访问性。
- 一个用于在 JSP 页中表示 JavaServer Faces 界面的 JavaServer Pages (JSP) 自定义标签库。
利用 JavaServer Faces 技术提供的简单、定义良好的编程模型,不同层次的开发人员可以在页面中组装可重用的 UI 组件、让这些组件连接到一个应用程序数据源、以及将客户机生成的事件写入服务器端事件处理程序,从而可以迅速并且容易地构建 Web 应用程序。这些 web 应用程序可以利用 JavaServer Faces 技术的强大能力处理所有复杂的服务器用户界面管理问题,使应用程序程序开发人员可以将精力集中到他们的应用程序代码上。
问: JavaServer Faces 技术有哪些优点?
答: JavaServer Faces 技术的主要优点包括:
- 容易使用: JavaServer Faces 体系结构有几个方面使它容易使用。其中之一是 JavaServer Faces 技术提供了逻辑与表示之间的干净分离,使范围广泛的用户 – 从 web 页面设计者到组件开发者 – 都可以利用 JavaServer 技术的好处,从而使分工明确并加快开发周期。同时,用 JavaServer Faces 技术生成的用户界面可以处理所有用户界面管理的复杂问题,包括输入验证、组件状态管理、页面导航和事件处理。
- 标准: JavaServer Faces 技术是通过 JSR-127 下的 Java Community Process 开发的。一些有实力的、重要的工具供应商是 JSR-127 专家组的赞助成员,并承诺在他们的工具中支持 JavaServer Faces 技术。
- 设备无关性: JavaServer Faces 技术设计为具有灵活性。JavaServer Faces 体系结构使组件开发人员只需要在可扩展的 UI 组件类中定义组件功能,就可以扩展组件类以生成自己的、针对特定客户机的组件标签库。
问: JavaServer Faces 技术的目标用户有哪些?
答: 因为JavaServer Faces 技术所具有的可扩展性和容易使用的特性,范围广泛的开发人员和 web 页面设计人员都可以利用 JavaServer Faces 技术的好处。这些用户包括:
- 页面设计人员,他们在 web 页面 -- 如 JSP 页面 -- 中用 JavaServer Faces 组件标签构建 UI 。这些用户最有可能是 JavaServer Faces 自定义标签库的主要用户。
- 应用程序开发人员,他们编写应用程序代码,包括数据访问、事件处理和业务逻辑。
- 组件编写人员,他们构建可重用的 UI 组件,并利用 UI 组件类的可扩展性构建针对特定客户机的自定义组件。
- 工具供应商,他们开发利用 JavaServer Faces 技术的工具,从而使用 JavaServer Faces 技术构建用户界面更容易。
问: JavaServer Faces 规范是由谁制定的?
答: 一些重要的业内人士与 Sun 共同定义了 JavaServer Faces 规范的第一个草案。专家组成员的完整名单请参阅JSR-127。
问:JavaServer Faces 技术、Struts 和 Sun Java System Application Framework(JATO) 的区别是什么?
答: Sun Java System Application Framework (以前称为 JATO)和 Struts 是流行的 Java Web 应用程序框架。JSR-127 的目的是为 Java web 应用程序定义一个用户界面框架,这样就与当前 Sun Java System Application Framework 和 Struts 的功能有了一些重叠。不过, JSR-127 与 Sun Java System Application Framework 和 Struts 是有区别的,因为它侧重于为用户界面提供一个组件模型。JATO 扩展了模型-视图-控制体系结构,它使用基于 J2EE 的设计模式,具有一个可扩展的同时又能马上使用的实现。Struts 更多是在表单或者页面水平上封装用户界面。
理想的方案 – 我们正在朝这个方向努力 – 是让 JavaServer Faces 技术与 Struts 和 Sun Java System Application Framework 共同工作。这意味着将来基于 Sun Java System Application Framework 或者基于 Struts 的实现将使用 JavaServer Faces 组件完成页面中组件级别的功能(呈现、事件等),但是继续使用它们自己的应用程序模型处理更高级别的功能,如表单和操作。
具体的实现细节仍然在 Sun Java System Application Framework 和 Struts 小组的帮助下正在制定当中,在 JSR-127专家组中也有他们的代表。
问:JavaServer Faces 技术与 JavaServer Pages 标准标签库(JSTL)有什么关系?
答:JSTL设计用于与作为 JavaServer Faces 技术的一部分的 JSP 标签库共同工作。例如,在 JavaServer Faces 教程中的 Performing Localization 一节描述了如何在 JavaServer Faces 应用程序中使用 JSTL 国际化功能。
问: JavaServer Faces 技术与 JavaServer Pages (JSP) 技术有什么关系?
答:1.0 版本的 JavaServer Faces技术依赖于 JSP 1.2。因为 JSP 2.0 是 JSP 1.2 的超集,所以1.0 版本的 JavaServer Faces 技术有可能使用 JSP 2.0。未来版本的 JavaServer Faces 规范将可以更好地利用 JSP 2.0。
问:有哪里可以找到有关 JavaServer Faces 技术的更多信息?
答:有关 JavaServer Faces 技术的更多信息请参阅 JavaServer Faces Tutorial。如果在本常见问题中没有回答您的问题,可以咨询 JavaServer Faces Forum。
问:如何将 JavaServer Faces 应用程序部署到其他 Web 容器中?
答:请参阅Deployment Guide。
Early Access 版本 4 的问题
问:在 EA4 版本中增加了哪些新功能?
答:在 EA4 中新增加的三个主要功能为:
- 应用程序配置文件(Application Configuration File)定义用于在应用程序启动时配置资源。可配置的资源包括:自定义组件、renderer、转换器、和验证器,render kit、导航规则、和模型 bean。在上一版本中,这些资源必须在程序中配置。这个新的功能使得不再需要以下对象:定义导航的ApplicationHandler,注册转换器、验证器、呈现器和消息的ServletContextListener。有关应用程序配置文件的描述,请参阅 JavaServer Faces 教程中的Application Configuration。
- 新的导航处理机制。在上一版本中,导航规则是在 ApplicationHandler 中以程序方式定义的。在这个版本中,导航规则是在可移植的应用程序配置文件中定义的。有关导航处理机制的描述请参阅 JavaServer Faces 教程中的Navigation Model。
- Managed Bean 创建工具。在上一版本中,JavaServer Faces 技术使您可以创建与 UI 组件对象分离的、封装了数据和业务逻辑的模型对象。这一版本完全指定如何创建和管理这些对象。这一版本还提供了 Managed Bean 创建工具,它创建新的模型对象并将它们储存在 scope 中。这个工具也是用应用程序配置文件配置的。有关 Managed Bean 创建工具的描述,请参阅 JavaServer Faces 教程中的Managed Bean Creation。
问:在试图运行我的应用程序时,看到这个异常: javax.servlet.ServletException: Cannot find FacesContext。如何改正它呢?
答: 您需要遵照在 JavaServer Faces 教程中Writing the web.xml File和 Invoking the FacesServlet 中的指导。
问:在运行 helloDuke 和 guessNumber 示例时,我得到像这样的异常: javax.faces.FacesException: org/apache/commons/collections/ArrayStack ... 如何改正它呢?
答:这些例子都是假设开发人员使用 Java Web Service Developer Pack 运行它们的。由于 Java WSDP 包含一些 JavaServer Faces 应用程序所需要的 JAR 文件,所以这些 JAR 文件没有拷贝到应用程序 WAR 文件中。您看到的这个异常是由部署环境没有包含所需要的 commons-collections.jar 这一事实所导致的。
要让这些例子可以正常工作,必须在部署环境的common/lib目录中、或者在这些例子的 WAR 文件中的WEB-INF/lib目录中加入在 JavaServer Faces 教程中 Including the Required JAR Files 一节列出的所有 JAR 文件。
在将来的版本中,这些例子将包括所有需要的 JAR 文件,这样它们就可以在其他兼容的配置中运行。