2012-03-30 189 views
1

使用JSF和Spring和Hibernate實現簡單的登錄屏幕。我在Spring中編寫了服務和數據層Bean,並將它們與Hibernate集成。集成JSF和彈簧

我在JSF中定義的新會員註冊(新用戶創建)屏幕,兩個字段用戶ID,密碼,並將它們連接到一個託管Bean。 (Bean名稱:用戶)這裏這個bean也是域類。

現在在JSF視圖中創建按鈕的點擊我需要調用服務bean方法(這是春天的豆)。爲此,我看到,我有兩種方法可以做到,

  1. 寫在用戶管理bean中的方法,它採用給定用戶,密碼,並調用春季服務bean的方法,後者又調用DAO bean的方法來保存數據在DB中。但在這裏,我的問題是,在Domain類中編寫控制器類方法有多好?

  2. 第二種方法是定義一個新的託管Bean,該託管Bean將Spring服務對象作爲屬性(使用spring + jsf集成注入)以及調用服務bean方法的方法。

我在做一個正確的設計?哪裏不對了?請建議我更好的設計。

謝謝

回答

2

不要讓您的域類作爲jsf託管bean。

一般我所遵循的是我封裝領域類和其他UI支持性的形式豆(當情況是複雜的其他實體直接在託管bean的屬性),並有它的託管bean。

春季服務在託管bean和行動的形式豆/實體bean將傳遞給業務/用例處理和持久性(DAO /庫)Spring事務注入。

模板代碼:

@ManagedBean 
public class Bean{ 

    private Entity entity;//or 
    private FormBean formBean; 

    @Inject private Service service; 

    public String doAction(){ 
    //error processing from service layer and UI message handling 
    service.process(entity);//or 
    service.process(formBean); 
    return Navigation.Constant; 
    } 
} 

Managed Bean的目的應該是收集觀測數據,並通過它來的業務處理。如果您將域/實體類作爲託管bean,那麼您將將其與JSF庫結合起來,這對重用性不利。根據SRP(單一責任原則)的設計原則,在這種情況下,班級應該承擔一個責任,因爲它會有更多的,因此如上所述不是好的做法。

你提到的第2點更好。

希望這有助於!

+0

感謝您的回答。那麼我遵循第二點。 – droidsites 2012-03-30 07:02:57

+0

@droidsites歡迎您 – 2012-03-30 08:28:25