如何按对象类型初始化控制器bean

时间:2015-03-05 12:22:51

标签: jsf primefaces cdi jsf-2.2

我有六种类型的Project对象,每种对象都由其类型(Enum)定义。每个项目类型都有自己的支持bean(Project1Bean,Project2Bean等)。从列表中选择项目后,我导航到selectedProject.xhtml页面,我想通过项目类型初始化为特定的支持bean。现在我有一个bean从DB加载项目,这个bean通过preRenderView事件初始化。然后bean中有很多方法,它们总是检查项目类型并执行一些操作。我想知道是否有更好的方法来按项目类型初始化特定的项目bean。我正在考虑使用一个SelectedProjectBean,它在preRenderView方法中加载项目并初始化特定的项目bean。但我不太喜欢这个解决方案。

class SelectedProjectBean {
    Project project;

    @Inject
    Project1Bean project1Bean;

    @Inject
    Project2Bean project2Bean;

    public void preRenderView() {

        project = loadProject();

        switch(project.getType()) {
            case Type1:
                project1Bean.preRenderView();
                break;                
            case Type2:
                project2Bean.preRenderView();
                break;
        }
    }

并在selectedProject.xhtml中

<ui:define name="metadata">
    <f:metadata>            
        <f:event type="preRenderView" listener="#{selectedProjectBean.preRenderView}"/>
    </f:metadata>
</ui:define>

是否有可能为项目组提供接口并使用一些限定符并且只有一个用于项目的命名bean?即让容器决定初始化哪个bean?

0 个答案:

没有答案