一般性問題
問:什么是 JavaServer Faces 技術?
答:JavaServer Faces 技術是一個構建 web 應用程序的用戶界面的框架。JavaServer Faces 技術包括:
- 一組 API,用于表示 UI 組件并管理它們的狀態(tài)、處理事件和輸入驗證、定義頁面導航、并支持國際化和可訪問性。
- 一個用于在 JSP 頁中表示 JavaServer Faces 界面的 JavaServer Pages (JSP) 自定義標簽庫。
利用 JavaServer Faces 技術提供的簡單、定義良好的編程模型,不同層次的開發(fā)人員可以在頁面中組裝可重用的 UI 組件、讓這些組件連接到一個應用程序數(shù)據(jù)源、以及將客戶機生成的事件寫入服務器端事件處理程序,從而可以迅速并且容易地構建 Web 應用程序。這些 web 應用程序可以利用 JavaServer Faces 技術的強大能力處理所有復雜的服務器用戶界面管理問題,使應用程序程序開發(fā)人員可以將精力集中到他們的應用程序代碼上。
問: JavaServer Faces 技術有哪些優(yōu)點?
答: JavaServer Faces 技術的主要優(yōu)點包括:
- 容易使用: JavaServer Faces 體系結構有幾個方面使它容易使用。其中之一是 JavaServer Faces 技術提供了邏輯與表示之間的干凈分離,使范圍廣泛的用戶 – 從 web 頁面設計者到組件開發(fā)者 – 都可以利用 JavaServer 技術的好處,從而使分工明確并加快開發(fā)周期。同時,用 JavaServer Faces 技術生成的用戶界面可以處理所有用戶界面管理的復雜問題,包括輸入驗證、組件狀態(tài)管理、頁面導航和事件處理。
- 標準: JavaServer Faces 技術是通過 JSR-127 下的 Java Community Process 開發(fā)的。一些有實力的、重要的工具供應商是 JSR-127 專家組的贊助成員,并承諾在他們的工具中支持 JavaServer Faces 技術。
- 設備無關性: JavaServer Faces 技術設計為具有靈活性。JavaServer Faces 體系結構使組件開發(fā)人員只需要在可擴展的 UI 組件類中定義組件功能,就可以擴展組件類以生成自己的、針對特定客戶機的組件標簽庫。
問: JavaServer Faces 技術的目標用戶有哪些?
答: 因為JavaServer Faces 技術所具有的可擴展性和容易使用的特性,范圍廣泛的開發(fā)人員和 web 頁面設計人員都可以利用 JavaServer Faces 技術的好處。這些用戶包括:
- 頁面設計人員,他們在 web 頁面 -- 如 JSP 頁面 -- 中用 JavaServer Faces 組件標簽構建 UI 。這些用戶最有可能是 JavaServer Faces 自定義標簽庫的主要用戶。
- 應用程序開發(fā)人員,他們編寫應用程序代碼,包括數(shù)據(jù)訪問、事件處理和業(yè)務邏輯。
- 組件編寫人員,他們構建可重用的 UI 組件,并利用 UI 組件類的可擴展性構建針對特定客戶機的自定義組件。
- 工具供應商,他們開發(fā)利用 JavaServer Faces 技術的工具,從而使用 JavaServer Faces 技術構建用戶界面更容易。
問: JavaServer Faces 規(guī)范是由誰制定的?
答: 一些重要的業(yè)內(nèi)人士與 Sun 共同定義了 JavaServer Faces 規(guī)范的第一個草案。專家組成員的完整名單請參閱JSR-127。
問:JavaServer Faces 技術、Struts 和 Sun Java System Application Framework(JATO) 的區(qū)別是什么?
答: 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 是有區(qū)別的,因為它側重于為用戶界面提供一個組件模型。JATO 擴展了模型-視圖-控制體系結構,它使用基于 J2EE 的設計模式,具有一個可擴展的同時又能馬上使用的實現(xiàn)。Struts 更多是在表單或者頁面水平上封裝用戶界面。
理想的方案 – 我們正在朝這個方向努力 – 是讓 JavaServer Faces 技術與 Struts 和 Sun Java System Application Framework 共同工作。這意味著將來基于 Sun Java System Application Framework 或者基于 Struts 的實現(xiàn)將使用 JavaServer Faces 組件完成頁面中組件級別的功能(呈現(xiàn)、事件等),但是繼續(xù)使用它們自己的應用程序模型處理更高級別的功能,如表單和操作。
具體的實現(xiàn)細節(jié)仍然在 Sun Java System Application Framework 和 Struts 小組的幫助下正在制定當中,在 JSR-127專家組中也有他們的代表。
問:JavaServer Faces 技術與 JavaServer Pages 標準標簽庫(JSTL)有什么關系?
答:JSTL設計用于與作為 JavaServer Faces 技術的一部分的 JSP 標簽庫共同工作。例如,在 JavaServer Faces 教程中的 Performing Localization 一節(jié)描述了如何在 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 規(guī)范將可以更好地利用 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)定義用于在應用程序啟動時配置資源??膳渲玫馁Y源包括:自定義組件、renderer、轉換器、和驗證器,render kit、導航規(guī)則、和模型 bean。在上一版本中,這些資源必須在程序中配置。這個新的功能使得不再需要以下對象:定義導航的ApplicationHandler,注冊轉換器、驗證器、呈現(xiàn)器和消息的ServletContextListener。有關應用程序配置文件的描述,請參閱 JavaServer Faces 教程中的Application Configuration。
- 新的導航處理機制。在上一版本中,導航規(guī)則是在 ApplicationHandler 中以程序方式定義的。在這個版本中,導航規(guī)則是在可移植的應用程序配置文件中定義的。有關導航處理機制的描述請參閱 JavaServer Faces 教程中的Navigation Model。
- Managed Bean 創(chuàng)建工具。在上一版本中,JavaServer Faces 技術使您可以創(chuàng)建與 UI 組件對象分離的、封裝了數(shù)據(jù)和業(yè)務邏輯的模型對象。這一版本完全指定如何創(chuàng)建和管理這些對象。這一版本還提供了 Managed Bean 創(chuàng)建工具,它創(chuàng)建新的模型對象并將它們儲存在 scope 中。這個工具也是用應用程序配置文件配置的。有關 Managed Bean 創(chuàng)建工具的描述,請參閱 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 ... 如何改正它呢?
答:這些例子都是假設開發(fā)人員使用 Java Web Service Developer Pack 運行它們的。由于 Java WSDP 包含一些 JavaServer Faces 應用程序所需要的 JAR 文件,所以這些 JAR 文件沒有拷貝到應用程序 WAR 文件中。您看到的這個異常是由部署環(huán)境沒有包含所需要的 commons-collections.jar 這一事實所導致的。
要讓這些例子可以正常工作,必須在部署環(huán)境的common/lib目錄中、或者在這些例子的 WAR 文件中的WEB-INF/lib目錄中加入在 JavaServer Faces 教程中 Including the Required JAR Files 一節(jié)列出的所有 JAR 文件。
在將來的版本中,這些例子將包括所有需要的 JAR 文件,這樣它們就可以在其他兼容的配置中運行。