集成JSF和spring

集成JSF和spring,jsf,ooad,Jsf,Ooad,使用JSF、Spring和Hibernate实现一个简单的登录屏幕。我在Spring中编写了服务和数据层bean,并将它们与Hibernate集成 我在JSF中定义了一个注册(新用户创建)屏幕,屏幕上有两个字段userid和password,并将它们连接到一个托管Bean。(Bean名称:Users)这里这个Bean也是域类 现在,在JSF视图中单击create按钮,我需要调用服务Bean方法(即Springbean)。为此,我有两种方法 在UsersManagedBean中编写一个方法,该方法

使用JSF、Spring和Hibernate实现一个简单的登录屏幕。我在Spring中编写了服务和数据层bean,并将它们与Hibernate集成

我在JSF中定义了一个注册(新用户创建)屏幕,屏幕上有两个字段userid和password,并将它们连接到一个托管Bean。(Bean名称:Users)这里这个Bean也是域类

现在,在JSF视图中单击create按钮,我需要调用服务Bean方法(即Springbean)。为此,我有两种方法

  • 在UsersManagedBean中编写一个方法,该方法接受给定的用户、密码并调用SpringServiceBean方法,而SpringServiceBean方法反过来调用DAOBean方法以在DB中保存数据。但这里我的问题是,在域类中编写控制器类的方法在多大程度上是一种好的实践

  • 第二种方法是定义一个新的托管Bean,它将Spring服务对象作为属性(使用Spring+jsf集成注入),并定义一个调用服务Bean方法的方法

  • 我的设计正确吗?有什么不对劲吗?请建议我做一个更好的设计


    谢谢

    不要将您的域类设置为jsf托管bean

    通常,我遵循的是将域类和其他支持UI的属性封装在表单bean中(当场景复杂时,将其他直接实体作为托管bean中的属性),并将其包含在托管bean中

    Spring服务被注入到托管bean中,并在操作时将形式为bean/实体bean的服务传递给Spring服务,以进行业务/用例处理和持久化(dao/存储库)

    模板代码:

    @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;
      }
    }  
    
    托管bean的目的应该是收集视图数据并将其传递给服务进行处理。如果将域/实体类设置为托管bean,则会将其与JSF库耦合,这不利于重用。根据设计原则SRP(单一责任原则),类应该有一个责任,在这种情况下,它将有更多的责任,因此如上所述不是好的实践

    你提到的第2点更好

    希望这有帮助