【发布时间】:2022-10-24 02:54:20
【问题描述】:
我正在使用 JSF 2.3,我想使用 CDI 将会话范围 bean 的不同子访问作为托管属性注入。
从下面的链接
How to inject different subclasses as ManagedProperty JSF 2?
我知道这对于使用“旧”JSF 和 JEE 注释的 RequestScoped bean 是不可能的,但是我的 bean 具有会话范围,并且我正在使用 CDI 注入,因此与上面链接中使用的注释不同。
特别是我有:
public abstract class BaseContainer {
String prop1;
}
@Named
@SessionScoped
public class MaklerContainer extends BaseContainer {
String prop 2;
}
@Named
@SessionScoped
public class AppManagerContainer extends MaklerContainer {
String prop 3;
}
public abstract class BaseBean {
@Inject
@javax.faces.annotation.ManagedProperty(value = "#{maklerSessionContainer}")
private MaklerSessionContainer maklerSessionContainer;
}
是否可以将 MaklerContainer 和 AppManagerContainer 的可互换实例作为上面 BaseBean 类的托管属性 maklerSessionContainer 注入?
【问题讨论】:
-
重要的问题是系统应该如何决定应该在注入点注入
MaklerContainer和AppManagerContainer中的哪一个,例如@Inject MaklerContainer x。你有什么需求? -
这应该在登录时完成,具体取决于用户角色。
标签: java cdi managed-bean session-scope jsf-2.3