隨筆-75  評論-193  文章-5  trackbacks-0

              由于前段時間使用JSF做了一個項目,不少使用JSF的兄弟們對JSF評價并不好,因此在學習的過程中一直在想,JSF究竟是不是應該繼續學習繼續研究使用下去,在看完Seam In Action的第三章后,這個星期又對Struts2簡單學習了一下,終于決定結束JSF和JBoss Seam的學習了。

              因為從JSF的學習和Struts2的學習對比中明顯覺得JSF復雜,對于一個技術力量不是非常強的項目組來說,使用JSF當你遇到一些問題時,絕對是一件痛苦的事情。

              從自己的實踐中覺得JSF至少有兩個致命傷:

              1、覺得JSF貌似把簡單的事情搞得復雜化了,在傳統的MVC框架如Struts中,從request中獲取param很容易,也可以將param封裝為對象,在JSF中,希望將這一切都模型化,一切都以組件為中心,類似于Swing的架構,但是http的無狀態以及web的本質,使得一般JSF只能將組件樹存放在服務端,同時又不能象CS程序那樣方便的查看組件的狀態、屬性等信息。對于通常情況來說,JSF將其封裝的很好,不用我們開發者操心,但是當遇到一些問題時,對于開發者想去調試查看問題時,問題就顯得很復雜了。

              2、JSF的自定義組件感覺超復雜,難度應該比當年自定義JSP標簽更要高,試想一下,如果哪個組件不合意了,想改一下,還是比較困難的,除非對JSF組件有相當的深入了解。

              順便把項目中遇到的一個RichFaces的缺點列出來:

              RichFaces在生成組件的html時,大量使用了Div,曾經有過一個頁面有1千多行(在一個table中),頁面上還有一個RichFaces的下拉菜單,從而導致菜單響應非常之慢,后來只有將rich:datatable換為普通的html:table,就沒有問題了。

              再看看Seam In Action中總結的JSF的缺點:

              1、在JSF中初次請求的處理流程太過簡單,而后續請求則執行了完整的復雜的處理流程。在JSF中假設第一個調用應該是在頁面被渲染后執行,但實際中有時我們需要在第一次請求時就執行某些操作。在JSF中缺少象Struts中的Controller。

              2、所有的請求都是POST。瀏覽器處理POST請求是比較草率,當用戶執行了一個JSF Action操作后,點擊瀏覽器的刷新按鈕時,瀏覽器會詢問用戶是否重新提交,這會令用戶非常困惑。

              3、僅僅擁有簡單基礎的頁面導向機制。

              4、過度復雜的生命周期。

              JBossSeam宣稱對于JSF存在的缺點都提供了解決方法,但是有一種更復雜的感覺。

              在Seam中,生成選擇的項目時,有EAR和WAR的選項,如果選擇了EAR選項,那么Seam會生成四個項目,分別為war、ear、ejb、test四個類型的項目。有一次我將生成的項目從一個目錄拷貝到另一個目錄,切換了Eclipse的workspace,此時問題來了,ejb項目提示編譯錯誤,提示無法找到某些class,找來找去找來找去......后來將項目關閉了一下,再打開錯誤提示就沒有了。

              由這個問題我忽然想到,使用Seam集成JSF、EJB是不是太重量級了,如果采用EJB作為替代普通的POJO,對于一個小型的項目組來說,一般的規模就是三至五個人(我個人的理解),開發人員本來就不多,還要面對Seam劃分的四個項目,好像比較繁瑣,當然采用war模式另當別論。

              相比較而言,這個星期看了一些Struts2的資料,覺得Struts2的架構非常清晰,易于理解。

              翻了很早之前的JavaEye上的一個帖子,提到JSF是面向開發工具的,如果能做到象VB那樣,就大有前途了,4年過去了,不要提JSF的開發工具了,就是Java各個方面的GUI開發工具,又有哪個能和VB相比呢,看來選擇JSF作為一個方向不是一個好選擇........還是及早放棄吧,哎...


              最后我覺得可以用這么一句話可以形容JSF,看起來很美,用起來不爽。

          posted on 2008-12-25 23:35 The Matrix 閱讀(2329) 評論(6)  編輯  收藏 所屬分類: JBoss Seam/JSF

          評論:
          # re: JBossSeam學習系列之五--完結篇 2008-12-26 10:57 | fool
          jsf高效省事 僅僅值綁定這一條就比struts2,struts強得太多
          當然學習曲線的確比較陡 另外各開源的jsf實現并不按sun RI參考實現的方式做組件,自定義組件確實難度大了點,學習諸如ADF之類就更麻煩了
          不過我還是喜歡jsf,很好  回復  更多評論
            
          # re: JBossSeam學習系列之五--完結篇 2008-12-26 12:05 | The Matrix
          @fool
          確實JSF的值綁定比較好用,但Struts2中的值綁定我簡單看了一下,發覺也沒有比JSF差太多,能否明確指明JSF的值綁定強在哪里,呵呵  回復  更多評論
            
          # re: JBossSeam學習系列之五--完結篇 2008-12-26 22:24 | Lf0x
          沒有什么技術是完美的,敢問Struts 2 能勝任所有的項目嗎? 才看了一周就能完全對另外一種技術做這樣的否定未免也太絕對了吧? 雖然還沒接觸 Struts 2 ,但是個人覺得 JSF 不差,況且企業級的開發并不是就局限在 Web 這個范圍呢的,JSF 有其自己的生存空間  回復  更多評論
            
          # re: JBossSeam學習系列之五--完結篇 2008-12-27 14:48 | yuanyc
          兄弟,服務器端組件模型有其優點..jsf 確實是過于復雜
          建議你看看wicket..既實現了服務器端組件模型的優點,又比較簡單..
          沒有xml 配置文件, 沒有標簽庫,只要html 模板和java代碼即可..  回復  更多評論
            
          # re: JBossSeam學習系列之五--完結篇 2008-12-27 16:16 | The Matrix
          @Lf0x
               說的不錯,沒有什么技術是完美的,Struts2不能勝任所有的項目,JSF也不能勝任所有的項目,任何東西都是相對的,沒有絕對合適的事情。
               JSF我并不是看了才一周,我們用它做了一個開發框架,包含了基本的權限管理及相應的用戶管理等基本功能,然后有三個項目使用了這個開發框架(我負責了其中的一個項目)。但是相關項目組的兄弟們對JSF反響并不是很好。
               本來我打算沿著JSF這條路繼續走下去,所以打算繼續研究JSF和其相關的技術,對這個開發框架繼續改進,但是研究了一段時間后,又看了Flex、Struts2后,覺得JSF確實比較復雜。而從web技術的發展方向來看,RIA肯定是重點。所以才對JSF有了動搖。
               因為我覺得JSF既然不是以后web技術演進的重點方向,又不是很好用,那么何必還讓好多人在它上面花費時間呢。
               感謝yuanyc的建議,我有空再看看Wicket。
               以后可以做這個試驗,用JSF、Struts2、Wicket對實現常用的功能進行一下比較,看看哪個最合適,呵呵。
            回復  更多評論
            
          # re: JBossSeam學習系列之五--完結篇 2009-01-06 17:28 |
          剛剛完成一個項目,客戶端是Applet開發的,服務端 WEB-ESB-EJB,其中ESB做到了對EJB->EJB,SOAP->EJB,SOAP->SOAP,和EJB->SOAP的調用,其中EJB包括本地和遠程兩種情況。

          就客戶端開發技術,我覺得有實力的公司還是采用Applet。首先表現力很豐富,使用了簽名后就相當于本地應用程序,功能極為強大;其次本來就有豐富的swing控件,當然本地數據集控件支持SOAP需要新開發(本人開發的,哈哈)。這樣客戶端開發人員其實就是做SWING的客戶端開發,效率不是蓋得。

          前后臺使用SOAP交互,擴展很方便。  回復  更多評論
            
          主站蜘蛛池模板: 全椒县| 邓州市| 定边县| 塘沽区| 城固县| 咸丰县| 衡阳市| 宁津县| 永平县| 江山市| 揭东县| 个旧市| 和平区| 土默特右旗| 梧州市| 永宁县| 彭阳县| 东乌| 民乐县| 新营市| 轮台县| 绿春县| 琼海市| 文成县| 承德县| 富宁县| 肥西县| 秀山| 揭西县| 开鲁县| 南康市| 东阿县| 华亭县| 铜山县| 盐源县| 共和县| 松江区| 靖西县| 元阳县| 乌兰县| 道真|