Sun 推出 JSF 主因:基於組件的 Web 開發是趨勢,自包含組件便於 IDE 處理,提升效率。JSF 優於 Struts/WebWork 等傳統 MVC 框架之處,在於能與 IDE 結合自動生成代碼,而傳統框架純手工編寫影響效率。又因 Java 在客戶端無優勢 (Applet 已棄),Sun 不願採用 JavaScript (傳統開發者視 JS 為瑣碎任務),故將所有用戶事件處理放在伺服端。
此決策導致 JSF 事件處理模型綁死在伺服器,限制了響應式交互設計,網絡延遲嚴重損害可用性。這也是 Ajax 在 JSF 架構中難以充分發揮作用的根本原因。
JSF 模仿 VB 組件化方向正確,但 VB 事件模型在本地處理,而 JSF 在遠端同步處理,本質差異導致「東施效顰」。設計階段同步請求/響應為主流,思路束縛於基於頁面的開發,未思考異步可能性。
異步帶來更好交互設計。以 Google Maps 為例:用戶拖動地圖時異步獲取圖片,不打斷操作流程;傳統地圖服務每次拖動需刷新整頁。微軟早期地圖甚至不允許拖動。Google Maps 雖未用 XMLHttpRequest (改用動態修改 img.src),但本質是異步請求,不阻塞用戶操作,故屬廣義 Ajax。
基於瀏覽器的 RIA 開發,Ajax 與 Flash/Flex/Laszlo 為兩大最有前途技術。微軟 Atlas (後稱 Silverlight) 當時尚屬 vaporware。Java Web Start 僅限內部應用。
架構設計若忽視異步交互本質,縱使組件化做得再好,終將被更貼近用戶體驗的技術取代。JSF 後期雖引入 Ajax 整合 (如 Ajax4jsf、RichFaces),但架構基因難改,不如原生 Ajax 框架 (jQuery、ExtJS 等) 靈活自然。