JSF 2.0對AJax的支持
JSF 2.0天生就支持Ajax,利用Ajax技術,Web應用程序在後台以異步的方式從服務器獲取數據。支持AJax後,允許頁面局部刷新,允許選擇視圖中的一個組件進行處理而不影響其它組件。
要在JSF中使用Ajax,需要訪問有資源標識符的JavaScript資源jsf.js,它存在於javax.faces資源庫中,包含讓JSF與Ajax交互的JavaScript API,JavaScript API由一組標准的Javascript函數組成,使JavaServer Faces框架中的Ajax操作變得簡單了,你幾乎不用直接包括這個文件,當你使用任何開啟Ajax的標簽或組件時,JSF會自動包括它。然後你就可以使用<f:AJax>標簽或調用JavaScript API中的函數了。
下面是一個使用<f:AJax>標簽的示例:
- <h:commandButton id="button1">
- <f:AJax execute="..." render="..."/>
- </h:commandButton>
這裡的<f:ajax>標簽是嵌套在<h:commandButton>標簽內的,這樣會結合在execute屬性中指定的AJax行為和<h:commandButton>標簽呈現的命令按鈕,你也可以指定一個event屬性來識別JavaScript DOM事件,如果你不指定event屬性,JSF使用組件的默認行為,這裡的默認行為是onclick,因此JSF結合execute屬性中指定的Ajax請求和呈現按鈕的onclick事件。用戶點擊該按鈕時,JSF提交AJax請求給服務器。
使用<f:AJax>標簽的一個好處是不用在頁面中指定載入jsf.JS,它會自動為你載入,相比之下,如果你調用JavaScript API,首先需要使用<h:outputScript>讓jsf.JS對當前視圖可用,例如:
- <f:vIEw contentType="text/Html"/>
- <h:head>
- <meta...
- <title...
- </h:head>
- <h:body>
- ...
- <h:outputScript name="jsf.JS" library="Javax.faces" target="body"/>
- ...
- </h:body>
- ...
然後才可以使用Javascript API中的函數產生AJax請求。例如,你使用JavaScript函數JSf.AJax.request向服務器發送一個請求,如下面的代碼:
- <h:commandButton id="button1" value="submit">
- onclick="JSf.AJax.request(this,event);" />
代碼包括一個<h:commandButton>標簽,它呈現為一個按鈕,用戶點擊這個按鈕時,向服務器提交一個AJax請求。
Servlet 3.0和JSF2.0中的更多新特性
Servlet 3.0中另一個新特性是允許你使用ServletContext類中的方法通過編程在Web應用程序啟動時向其添加Servlet和Servlet過濾器,使用addServlet()方法添加Servlet,使用addFilter()添加Servlet過濾器。結合可插拔式共享框架特性,Web框架可以在無開發人員介入的情況下實現自我配置。
JSF 2.0中的一些額外增強與資源如何打包和處理有關,JSF 2.0標准化了打包哪裡的資源。所有資源都放在resources目錄或一個子目錄下,資源需要按順序正確地進行渲染,例如CSS文件和JavaScript文件,圖3顯示了Netbeans中的一個JSF項目部分結構及文件,注意其中的resources目錄,CSS和images目錄。
圖 3 JSF應用程序中resources目錄下的資源
JSF 2.0也包括顯示和處理資源的API,使用javax.faces.application.Resource類顯示一個資源,使用Javax.faces.application.ResourceHandler類創建資源的實例。有關JSF 2.0的更多信息,請參閱JSR 314規范。
【51CTO.com譯稿,非經授權請勿轉載。合作站點轉載請注明原文譯者和出處為51CTO.com,且不得修改原文內容。】
原文:Introducing the Java EE 6 Platform 作者:Ed Ort