在JSF中使用构建器模式?

时间:2012-02-07 10:49:48

标签: java java-ee jsf-2 ejb cdi

我只是想把我的一个小桌面应用程序移植到网络上。 从几天开始,我试图找出如何在JSF中使用构建器模式(我已经拥有)? 或者我是否必须重构为Bean实体并且不能使用Builder?

请考虑以下代码:

public class MyFacade {
  private MyClass bar;

  publich save() {
    crudService.persist(bar);
  }
}


<h:inputText id="name" value="#{MyFacade.bar.property}" />
//submit button

我希望将文本字段值存储到我的DB /实体当然。如果你有正常的后端bean,这很容易。

但是如果我像下面这样创建我的对象呢?

MyClass newObject = MyClass.Builder("mandatory field").setOptionalFields("optional field").build();

如何在jsf中使用它?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,你应该在JSF应用程序中引入另一种类型的bean,只是为了与你的视图进行交互,并保留你的外观(dao)bean。 你最终会得到这样的东西:

@RequestScoped
public class YourBean{

    @Inject
    private MyFacade facade;

    //bean created with builder
    private MyBean bean;

    public String someMethodExecutedwithEL(){
        //build your object here and save it with the dao layer
        facade.save(objectFromBuilder);
    }
    @PostConstruct
    public void init(){
        //create your bean with builder pattern
    }
}

上面的例子当然只是一个潦草的想法,关键在于没有什么能阻止你使用构建器模式创建对象,只需引入另一层来分离关注点。

编辑:

如果要在jsf页面上使用它们之前创建对象,可以添加带注释的方法@PostConstruct  (也更新了代码示例)

可能性是无穷无尽的。

提示 - 考虑使用标准命名约定和常识命名您的类和变量。