获取具有其他名称的会话范围bean的新实例

时间:2015-05-12 07:52:12

标签: jsf cdi jsf-2.2

我有一个会话范围的bean用于UI来编辑一些数据。它使用@Named和@SessionScoped进行注释,并且都在JBoss 6.2中运行。现在我得到了一个几乎相似的编辑UI的要求。问题是两个UI可以并行存在。因此,为了完美重用,最好用另一个名称创建bean的新实例。不幸的是,我不清楚如何以干净的CDI方式做到这一点。 我不喜欢从bean继承并给出另一个名字。这是我的一个想法。 另一个想法是在托管bean中仅实现业务逻辑并保持从它们封装的数据,并在特定上下文中需要时在托管bean中设置数据对象。但也许有另一种CDI方式与生产者或什么? 在我的情况下,将bean的范围更改为ViewScope是没有意义的。

由于 奥利弗

1 个答案:

答案 0 :(得分:2)

  

但也许还有另一种CDI方式与生产者或其他东西

确实,你可以使用制作人。

开球示例:

@SessionScoped
public class SessionBean {

    @Produces
    @Named("foo")
    @SessionScoped
    public SessionBean getAsFoo() {
        return new SessionBean();
    }

    @Produces
    @Named("bar")
    @SessionScoped
    public SessionBean getAsBar() {
        return new SessionBean();
    }

    // ...
}

(方法名称可供您自由选择)

用法:

@Inject
@Named("foo")
private SessionBean foo;
@Inject
@Named("bar")
private SessionBean bar;