1

我们有一个在 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>

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

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

这可以直接完成吗?如果可以,怎么做?


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

4

1 回答 1

0

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

于 2012-03-02T15:36:06.883 回答