2012-03-02 85 views
1

我們已經在GlassFish 3.1.1下運行的JSF 2.0應用程序,它已經從JSF 1.前移這意味着我有一個faces-config.xml中說如何告訴Glassfish中的JSF 2.0實例化一個CDI @Alternative的<managed bean>?

<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頁面。效果很好。我也可以使用@ javax.inject.Inject 的OnlineBeanHandler中獲得一個CDI託管bean,然後我可以通過@ javax.enterprise.inject.Alternative提供一個替代方案,並在beans.xml中啓用它。效果很好。

現在我需要爲OnlineBeanHandler本身工作相同的機制 - 即有<managed-bean> - 處理代碼調用我的替代類而不是明確命名的,但是當遵循相同的步驟時,我仍然得到我的基類,而不是我的選擇。

這可以直接完成,如果是的話如何?


顯然這個機制在那裏不起作用。在目前的情況下,我們可以通過創建另一個faces-config.xml文件來完成這些工作,並且只能通過項目覆蓋這些文件。然後由每個項目提供替換faces-config.xml。

回答

0

這兩種管理bean是獨佔的。 CDI替代品僅適用於CDI託管的bean,而不是JSF管理的bean。您可以刪除faces-config中的XML片段並添加@Named,那麼您將可以使用@Alternative。