A Web Framework !
JSF 為有狀態的 UI 組件模型
JSF(JavaServer Faces) 為 JEE 所提供以使用者介面(User Interface, UI)組件型態的 Web 框架, 主要功能在於:
- 簡化使用者介面(UI)上的開發, 減少開發與維護時間.
- 易於制作頁面與頁間的流程關係(可視化 IDE 開發支持)
- UI 封裝了 JS 框架UI 與 AJAX
- 視圖描述语言(JavaServer Faces View Declaration Language,簡稱 Facelets)
- Facelets 通常是使用 XHTML 標記語言所編寫, 因此 Facelets 是可跨不同開發平台
- 事件驅動 UI 組件
JSR 標準規範
RIA 與 JSF
標準的 JavaServer Faces(JSF)的框架的擴展,旨在去除方程中的 JavaScript 從而簡化程序員的工作流程。換句話說,JSF 通過 Java 應用介面為你處理了所有的JavaScript / Ajax。通過刪除這些自定義 JavaScript 函數的複雜引入,大大簡化了創建富網絡應用的任務。 如果你的團隊主要成員是 Java 開發人員,或者如果你的網絡應用程序不需要其它 JSF 沒有的複雜組件,又或者如果你的網絡應用程序是事件驅動 的, 那麼使用ICEfaces是很好的選擇。
JSF 2.0 改變
始於 2008年 JSR 314 草案 - 引入 Java 5.0 Annotation, 以允許簡化 XML 配置
- Web 應用程序的 XML 配置始終是個麻煩問題 — 它非常冗長並且容易出現錯誤,因此最好將 XML
配置委託給一個框架,比如通過註釋、約定或特定於領域的語言。作為開發人員,我們應該能夠集中精力實現一些操作,而不是將浪費時間在冗長的 XML
方面。
- 通過使用 Annotation 和 Default values 來減少 XML。
- .JSP -> .XHTML
- 使用基於 Facelets 的視圖技術代替 JSP。
- 盡可能不要混用 JSP / JSTL 在 JSF 2+
- 以JSF為中心的Facelets是JSP的一個替代方案,被JSF開發者廣泛使用,它通過復合組件來支持模板,這在一定程度上改進了JSF。
- /resources
- 提供一種標準化的資源處理機制:很多組件都需要諸如JavaScript文件、圖片或者是CSS元素等內容來正確地進行渲染。JSF
1.x 無法方便地處理這些內容,所以組件開發者不得不開發自己的處理機制。
- <h:outputScript name="wisdomfish.js" library="scripts" />
- 可重新定位的資源:我們可以指定在哪裡渲染資源,這個渲染位置可能與視圖中的資源標籤位置不同。這使得我們可以定製組件和JSF頁面以在恰當的地方渲染引用的資源,這樣即使組件被包含在body中,我們也可以在中引用CSS文件。
- 擴展JSF 1.2中引入的AJAX支持。
- JSF Templates engine.
- 這種方式需要創建一個包含模板標記和組件的XHTML頁面,然後將這些頁面作為組件在其它頁面中使用。任何有效的Facelet
XHTML頁面都可以作為組件使用,與JSF 1.x中使用Facelets不同,JSF
2中的復合組件都是真正的UIComponents,這樣它們就會支持驗證器、轉換器及監聽器(可以監聽行為和值的變化)。
系統事件:發佈/訂閱的事件模型所支持的事件不再特定於一個具體的應用,而是起源於JSF應用執行過程中的特定時間點。UI組件和應用對象(這是一個單例)都能收到系統事件。 增加的scopes:增加了視圖scope和組件scope。對對話scope的支持預計會通過 Web Beans API增加。 「project stage」參數的標準化:Project stage提供一種方式來影響JSF的行為,這以一組預先定義好的階段枚舉為基礎,而這些階段可以通過上下文參數或者JNDI進行設置。比如說,產品化開 發和檢查期間可以在瀏覽器中顯示更多的調試資訊。已定義的階段有產品化、開發、單元測試、系統測試及產品化擴展階段,並將產品化擴展作為默認值。你可以在 運行時通過調用Application.getProjectStage()來查詢應用對象以獲得相應的值。
Requires libs JSTL 1.2
UEL
JSF 2.0 requires java 1.5 or later, JSP 2.1, JSTL 1.2 and a Java Servlet
2.5 implementation.
Configuration
WEB-INF/
- web.xml
- url-pattern-mapping: *.jsf -> *.xhtml
- faces-config.xml
- navigation-rule
- ManagedBean Scope
Facelets
WebContent/
Following ...
a.jsf (Mapping)
a.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
...
<h:commandButton value="Sign Me Up!"
action="#{healthPlanBean.signup}"/>
Checked faces-config.xml
<navigation-rule>
<from-view-id>/health-plan-signup-2.xhtml</from-view-id>
<navigation-case> ...
action="#{healthPlanBean.signup}"
==> src/.../HealthPlanBean.java
Member ---> method: singnup( )
return Value to <navigation-case>
import java.faces.bean.*
@ManagedBean @RequestScope
public class HealthPlanBean{ public String signup(){
// implement content
return ...;
}
}
JPA 2.0
// TODO implements content
References
JavaServer Faces Technology 2.0 Reference Documentation
|
|