2012-01-24 45 views
2

我有一個問題,更多的設計和架構相關。我來自一個經典的基於MVC的背景,不得不讓我的手弄髒JSF2。我閱讀了JSF2上的IBM文章(http://www.ibm.com/developerworks/library/j-jsf1/),並認爲我理解了整體概念。混淆:JSF2中的Bean與經典MVC控制器的作用

我開始接觸JSF2槽ROO。我覺得ROO(對於任何JSF2類型的應用程序來說都是如此,或者可能不是這樣)正在使用bean非常奇怪/不清楚的用法。一般來說,我不清楚Bean的實際作用是什麼!例如,如果我有一個窗體用於編輯單個用戶條目的視圖,我會在a中初始化用戶,我們稱它爲UserBean(可能存儲在成員變量中)並訪問此變量通過getter。如果我現在想要概述所有用戶,我將再次在UserBean中呈現視圖來保存一組用戶,並再次通過getter訪問此集合。前面的描述實際上是我用jsf做事情的方式。這意味着我會更多地將UserBean用作控制器的全狀態服務。

在典型的控制器情況下,我會爲每種類型的動作(列表用戶,編輯用戶,查看用戶等)創建一個單獨的控制器,並使用特定的初始化數據,這樣我就可以通過控制器分離邏輯上下文。

我經常使用上下文特定的服務,例如,如果我處理用戶經常在應用程序上傳播,我創建一個用戶服務來處理用戶特定的邏輯,這可能是複雜的,可以放入其中。如果我現在看看roo生成的Beans,我會找到編程方式來渲染表單,輸入字段,標籤,再次存儲用戶列表,布爾字段指示數據是否已經加載,單個用戶成員和很多更看起來像放入UserService(或其他)的方法。我想知道這是否是JSF2打算用於語言的方式:將與一個上下文相關的所有內容都推送到bean上,而不是使用服務和編寫處理所有內容的「超級控制器bean」。

我真的不知道,如果你的問題的權利,但你會也許能幫我就是一個提示

  1. 一個非常典型和值得稱道的示例應用程序,使得使用豆類他們路在何方旨在與jsf2功能和用例相結合使用,例如在給定類型的實體周圍實現基本的CRUD用例。 (一個令人困惑的問題是,在我的例子中,ROO總是使用AJAX和像Modal-Dialogs這樣的JavaScript來實現CRUD邏輯,我想知道JSF是否有更經典的方法來實現這一點?意思是例如基於URL的視圖和用於列表,編輯和查看實體的分離視圖])
  2. 一個啓發典型的「這就是好方法」的資源JSF模式(也許這個是J2EE模式?)。

非常感謝你!

如果我不清楚,請隨時推薦我具體點!

回答

2

您已將JSF2鏈接發佈到JSF1.2文章。如果你想開始使用JSF2或JSF,我建議以下鏈接。

我會建議先使用普通的香草JSF而不是ROO與JSF獲得JSF的竅門。

要回答你的問題

  • 首先鏈接爲您提供了簡單的JSF的例子,在JSF你可以同時擁有AJAX提交表單的基礎和古典的方式。在JSF 1.x版本中,ajax不是JSF的組成部分,而是由第三方組件庫(主要是RichFaces和PrimeFaces)來實現的。在JSF2中有對Ajax的內置支持,這不適用於不再需要的第三方組件,它們仍然提供一些擴展功能。我會建議通過這個link來找出JSF 1.x和JSF 2之間的區別。
  • 模式我不知道像JSF特有的那樣,除了代碼可以在模型 - 視圖 - 控制器中分類。典型案例Person表示模型,PersonMangedBean扮演控制器的角色,扮演着從視圖(jsp/facelets)獲取數據的核心角色,並且在bean本身處理數據或處理導航到經典視圖的服務bean後,可能是listPersons.xhtml。
  • JSF託管的bean不是處理該bean中所有東西的「超級控制器bean」。我嘗試按照您提到的方式對事物進行分類,即擁有一個服務層,我們擁有所有的業務邏輯可能是EJB或Spring託管bean,並且它至少將業務邏輯從視圖技術JSF中分離出來,從而使其(服務)可以在其他地方重用作爲圖書館,如果設計正確。
  • 提示:JSF是基於組件的框架,不是基於操作的,它具有自己的生命週期,掌握生命週期將節省大量時間並正確理解框架。這個link雖然對於JSF 1.x也適用於JSF2,對於生命週期的基本理解。

希望這會有所幫助。

+0

gbagga!首先感謝!最後,JSF似乎適合了model2模式本身,正如你所說 - 更多的是面向組件的方法。我會閱讀資源來感受它。它可能更好從0開始,手動把事情給不是蜜蜂愚弄我的任何(ROO) - 魔法。再次感謝! –

+0

歡迎你 –

+0

@thedude增加了一個鏈接@ stackoverflow jsf wiki –