首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Seam 與 JSF 的加減法:從碎片化修補到整合式框架的演進之路

     編輯:J2EE

JSF 本身問題重重:它是標準而非技術(javax.faces.* 全是介面/抽象類),面向組件廠商而非應用開發者,Sun RI 只是教廠商做組件的 Demo。標準取各方交集,標準外需自行發揮。JSF 早於成熟應用誕生,預見不足在所難免:有處過度限制,有處過度放鬆被忽略。但初衷良好、可擴展性強,催生大量基於 JSF 的修補框架。

三大獨立修補方向

  1. Ajax4JSF:解決 JSF Postback 整頁重傳浪費。事件模型天然適合局部刷新,Ajax 出現時 JSF 已定型未納入。A4J 讓整頁重繪變組件級重繪,無需寫 JS,只改標籤開關。
  2. Facelets:取代 JSP 在 JSF 中地位。JSP 非模板語言,只是 HTML+Java 混合,與 JSF 事件模型零互補、添亂。Facelets 是真正模板語言:EL 可嵌入任意位置、熱部署、效能優於 JSP、參數化模板、定義新組件零 Java 代碼(分離頁面片段 + taglib.xml 配置),緩解 JSF 組件匱乏、Debug 顯示行號、無限嵌套模板。
  3. Seam:雖本質無關 JSF,但建構於 JSF 之上,被迫修補 JSF 缺陷:
    • Page 行為統一
    • Context Filter
    • RESTful 參數重建
    • 可定制異常處理
    • 跨重定向狀態保持

JSF 加減法公式

JSF - (全頁刷新) + Ajax4JSF - JSP + Facelets + 全局Page行為 + Context-filter + Restful參數綁定 + 可定制異常 + 跨重定向狀態 = 「一大碗炸醬麵」

像經無數修補的黃金聖衣,雖能用但不如重鑄。JSF 需整合模型將分散部分統一,拋棄冗餘、以集成方式融合新內容。開發者不想學習零散組件關係、Bug 分佈、選型決策,想要「明白人替我做決定、且 Make Sense」。

Seam 正朝此方向邁進

兩條件成就 Seam:大量零散可用組件缺乏統一形式(背景:JSF 標準)、領域深度熟悉者主導。Seam 對 JSF 的修補只是極小一步,基於 Seam 核心(Conversation 模型、CoC 理念、元註解+XML 配置、動態雙向注入、擴展 EL、內部事件監聽、Drools 安全整合、Hibernate Search/Validation/Remoting、jBPM、Groovy、iText 整合)水到渠成。

JSR-299:標準化 Seam 經驗

已進 Early Draft Review 的 JSR-299,借鑒 Seam/Guice,試圖將此方向推得更遠。

結語

不說 Seam 誕生大環境與語言基礎,只說功能也行,但外在功能多由環境與內在因素決定。大環境與內在定下,細節只是做而已。所以還是得繞開 Seam 本身說些題外話。本文說明 Seam 誕生環境(外在機會、寬緯度),下文將從 Java 語言可能性(內在能力、深緯度)闡述 Seam 融合本事。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved