2012-02-07 71 views
1

我只是试图将我的一个小桌面应用程序移植到网上。 自从我试图了解如何在JSF中使用构建器模式(我已拥有)之后呢? 或者我必须重构Bean实体并且不能使用Builder?在JSF中使用生成器模式?

考虑下面的代码:

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中使用这个功能?

感谢很多

+2

你的实例的创建与JSF本身有什么关系? – Kris 2012-02-07 11:05:54

+0

那么问题是我不知道如何通过EL表达式访问JSF中的“MyClass new Object”?正常的java我只是会创建上面用MyClass.Builder(...)所述的对象,但对于JSF和输入文本字段,我必须以某种方式访问​​属性。没有实例化强制性字段等。 – membersound 2012-02-07 11:17:10

+0

看看下面的答案,你可以在页面上使用它们之前初始化你的对象,例如。在'YourBean'中用方法标记为@PostConstruct – Kris 2012-02-07 11:28:43

回答

1

如果我理解正确的话,你应该引入另一种类型的豆到你的JSF应用程序只是互动赞同你的观点,并留下您的门面(DAO),豆类,因为它们。 你最终会是这样的:上面

@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 
    } 
} 

例子当然只是一个潦草的想法,问题是,有什么能够阻止你使用生成器模式创建的对象,只是引入分离另一层的担忧。

编辑:

如果你想他们可以添加注释的方法@PostConstruct (更新代码示例为好)

可能性是无穷的JSF页面上使用之前创建的对象。

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