我们有一个在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。
答案 0 :(得分:0)
这两种类型的管理bean是独占的。 CDI Alternatives仅适用于CDI托管bean,而不适用于JSF管理bean。您可以删除faces-config中的XML片段并添加@Named,然后您就可以使用@Alternative。