整合層級演進
- Naked AJAX:手寫
XMLHttpRequest、setTimeout、跨瀏覽器相容——不推薦
- JS 框架:Dojo/DWR/Prototype 封裝底層,但需撰寫侵入性代碼整合 JSF
- JSF AJAX 擴展:Project Dynamic Faces、ICEfaces、Ajax4jsf (RichFaces)、BackBase、JackBe —— 推薦
- 帶 AJAX 的 JSF 組件庫:開箱即用,jsfcentral.com 可比較市場行情
Project Dynamic Faces 亮點
- 零 JavaScript 開發,純 JSF API 即得 AJAX 效果
- 正確處理 JSF 上下文敏感交互(利用 JSF 1.2 新特性)
- 支援批次事件提交,減少往返
- 僅 2 個 JSP Tag + 2 個 JS Function 即可上手
- 現處於 0.1 版,缺乏大規模測試,謹慎生產使用
架構設計哲學:為何 JSF 天生適合 AJAX
- Swing 風格組件模型:狀態保持在伺服器,客戶端僅為投影
- 定義良好的生命週期:比單純 Request/Response 豐富,可精確控制局部更新
- 彈性渲染模型:
RenderKit 封裝客戶端細節,支援多種輸出格式
- JavaScript 封裝責任在組件開發者:頁面作者無需觸碰 JS,統一管理同步
常見 AJAX 問題與 JSF 解法
| 問題 | JSF 方案 |
| 跨瀏覽器相容 | 組件庫封裝 JS 框架解決 |
| 國際化/本地化 | JSF 內建支援,AJAX 無需介入 |
| Script 管理 | Shell remoting 機制,安全載入 classpath 外 JS |
| 過多 XMLHttpRequest | Dynamic Faces 批次事件一次送出 |
| XML 回應含 實體導致 Mozilla 解析失敗 | JSF 方案統一定義實體或改用 JSON |
未來展望:JSF 2.0
- 更 Client-centric 生命週期
- 可能弱化組件概念,但保留驗證/轉換核心
- 專家組 (EG) 正在制定規範,官方 AJAX 方案仍需時日
結論
為現有/新專案插上 AJAX 翅膀極具價值。Dynamic Faces 讓開發者以極小成本跨出關鍵一步。建議:以 JSF 為基礎,選用成熟 AJAX 組件庫(RichFaces/PrimeFaces/ICEfaces),避免自行整合 JS 框架。
- 上一篇文章: 表現層框架三雄對決:Struts vs Tapestry vs JSF 深度比較
- 下一篇文章: JSF 整合 AJAX 企業級開發之路(一):動機、層級與 Dynamic Faces 介紹
Copyright ©
程式碼之家 All Rights Reserved