2012-03-30 197 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