2015-05-22 54 views
0

我有JSF 2.0 + Spring項目,並且在嘗試將Spring bean自動裝入JSF bean時出現了一些奇怪的事情。這裏是我的ApplicationContext中樣本:將Spring應用程序上下文自動裝配映射到JSF bean中

<context:component-scan base-package="com.ticketfront" /> 

<util:map id="map" > 
    <entry key="rp"> 
     <util:map> 
      <entry key="9003" value="RegP"/> 
     </util:map> 
    </entry> 
</util:map> 

這裏是我的JSF bean的一部分:

@Named 
@Scope("session") 
public class TicketViewBean implements Serializable { 

@Autowired 
Map<String, Map<String, String>> map; 
} 

部署運行成功,但在我的JSF bean的自動裝配屬性映射第一項是正常的像我的applicationContext配置,但有很多其他條目放入地圖。例如:

map = (java.util.LinkedHashMap) {map={rp={9003=RegP}}, systemEnvironment={USERPROFILE=C:\Users\Administrator, JAVA_HOME=C:\Program Files\Java\jdk1.7.0_40, NB_EXEC_TOMCAT_START_PROCESS_UUID=tomcat70:home=C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.34:base=apache-tomcat-7.0.34.0_base, SystemDrive=C:, JPDA_TRANSPORT=dt_shmem, CURRENT_DIR=C:\Program Files\Apache Software Foundation\Ap 

和許多其他不同的東西,甚至是WEB-XML ....

我完全糊塗了,爲什麼發生這種情況

+0

您正遇到一個角落案例'Map '有點特殊,因爲它會爲您提供所有具有名稱(作爲關鍵字)和值的bean。你基本上要求所有'Map'類型的bean,這也是你所看到的。第一個條目不像你說的那樣,但它實際上是你的具有元素而不是單個元素'rp'的映射。 –

回答

1

由於Spring參考指南中提到here

只要預期密鑰類型爲String,即使鍵入的地圖也可以自動佈線。該Map值將包含預期的類型的所有豆類和將包含相應的bean的名字鍵:

那麼你得到的是MapMap。這將給你自己的Map,但也可以表示爲Map或其中是Map所有其他豆。大多數PropertySource豆都是這種情況,您可以在豆中獲得Map。 (systemEnvironment都是環境變量)等等。

要修復,請在您的定義中添加一個@Qualifier("map")或使用@Resource而不是@Autowired

+0

非常感謝! @Qualifier確實有幫助。現在它工作正常! –

相關問題