2012-05-10 36 views
3

我們有一個非常複雜的JSF託管bean配置文件,如下所示。
有什麼辦法將其轉換爲某種CDI配置?
現在,當我們在AbcConfigFactory上使用@Inject時,它不會初始化配置文件中的值。我想這是因爲我們使用CDI來初始化它而不是JSF ......或者類似的東西。 :)將託管屬性的JSF轉換爲CDI

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 

    <managed-bean> 
     <managed-bean-name>AbcConfig</managed-bean-name> 
     <managed-bean-class>com.a.b.c.AbcConfigFactory</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
     <managed-property> 
     <property-name>abcSites</property-name> 
     <list-entries> 
      <value-class>com.a.b.c.SiteConfigBean</value-class> 
      <value>#{SiteConfig$A}</value> 
      <value>#{SiteConfig$B}</value> 
     </list-entries> 
     </managed-property> 
    </managed-bean> 


    <managed-bean> 
     <managed-bean-name>SiteConfig$A</managed-bean-name> 
     <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class> 
     <managed-bean-scope>none</managed-bean-scope> 
     <managed-property> 
     <property-name>siteName</property-name> 
     <value>A</value> 
     </managed-property> 

     <managed-property> 
     <property-name>starConfig</property-name> 
     <property-class>com.a.b.c.StarConfigBean</property-class> 
     <value>#{StarConfig$A}</value> 
     </managed-property> 
    </managed-bean> 

    <managed-bean> 
     <managed-bean-name>SiteConfig$B</managed-bean-name> 
     <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class> 
     <managed-bean-scope>none</managed-bean-scope> 
     <managed-property> 
     <property-name>siteName</property-name> 
     <value>B</value> 
     </managed-property> 

     <managed-property> 
     <property-name>starConfig</property-name> 
     <property-class>com.a.b.c.StarConfigBean</property-class> 
     <value>#{StarConfig$A}</value> 
     </managed-property> 
    </managed-bean> 

    <managed-bean> 
     <managed-bean-name>StarConfig$A</managed-bean-name> 
     <managed-bean-class>com.a.b.c.StarConfigBean</managed-bean-class> 
     <managed-bean-scope>none</managed-bean-scope> 
     <managed-property> 
     <property-name>siteName</property-name> 
     <value>A</value> 
     </managed-property> 
    </managed-bean> 
</faces-config> 

回答

1

的CDI規範的最初版本有XML配置豆,但它後來被刪除,只是被重新納入規範的未來版本最近(據我所知)。

所以,簡單的答案是:不,你不能用XML來配置CDI豆(和CDI和JSF是兩回事,你將無法再使用JSF配置文件,而無需改變 - 顯然)。

您問題的解決方案附帶Seam Solder,它使用CDI的擴展機制來完全添加該功能(以及更多)。但是你仍然需要重新配置你的配置以適合你的CDI-beans。

不知道你的問題域中的任何事物:

如果XML的配置是某種歷史的孑遺的是由現實世界的需求迫使(如對於不同部署場景不同的佈線),我強烈建議轉儲XML並切換到CDI的基於類型安全註解的方法。所有主流用例都有概念(如用於測試的不同佈線),並且可以免除使用XML進行「編碼」的負擔。

如果您確實需要(或仍然需要)基於XML的配置,Seam Solder是您的方法。

+0

我**認爲**我們使用XML配置來更容易地配置應用程序。但我不確定在這裏。 – Pierre