如何告诉Glassfish中的JSF 2.0实例化<managed-bean>的CDI @Alternative?</managed-bean>

时间:2012-03-02 09:31:25

标签: java jsf cdi jsr330

我们有一个在Glassfish 3.1.1下运行的JSF 2.0应用程序,它已从JSF 1向前移动。这意味着我有一个faces-config.xml说

<managed-bean>
    <managed-bean-name>OnlineBeanHandler</managed-bean-name>
    <managed-bean-class>X.jsf.OnlineBeanHandler</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
            ...
</managed-bean>

这样做是为了允许在我的facelet页面中使用#{OnlineBeanHandler}。效果很好。我也可以使用 OnlineBeanHandler中的@ javax.inject.Inject 来获取CDI托管bean,然后我可以通过标记@javax.enterprise.inject.Alternative并在bean中启用它来提供替代方法。 XML。效果很好。

现在我需要为OnlineBeanHandler本身使用相同的机制 - 即让<managed-bean> - 处理代码调用我的替代类而不是显式命名的类,但是当遵循相同的步骤时,我仍然得到我的基础而不是我的替代品。

这可以直接完成,如果是这样的话?


显然这种机制在那里不起作用。在目前的情况下,我们可以创建另一个faces-config.xml文件,并让那些项目被那些项目覆盖。然后,每个项目都会提供替换faces-config.xml。

1 个答案:

答案 0 :(得分:0)

这两种类型的管理bean是独占的。 CDI Alternatives仅适用于CDI托管bean,而不适用于JSF管理bean。您可以删除faces-config中的XML片段并添加@Named,然后您就可以使用@Alternative。