2015-05-22 3 views
0

У меня есть проект JSF 2.0 + Spring, и в некоторых случаях возникают какие-то странные вещи, когда я пытаюсь автоповестить Spring bean в JSF bean. Вот пример моего ApplicationContext:Autowiring Map из Spring applicationContext в 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 фасоли:

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

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

запустить развертывание успешным, но в моем JSF боба карте autowired собственности первая запись нормально, как я настроил в 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

Вы используете угловой футляр «Карта » - это отдельный случай, так как он даст вам все бобы с именем (как ключом) и значением). Вы в основном запрашиваете все фасонные символы «Карта», что также и то, что вы видите. Первая запись не такая, как вы говорите, но на самом деле это ваша карта с элементами, а не с одним элементом 'rp'. –

ответ

1

Как упоминалось here в Спринг Справочное руководство

Даже типизированные Карты могут быть отфильтрованы до тех пор, пока ожидаемый тип ключа String. В Map значения будут содержат все бобы ожидаемого типа и ключи будут содержать соответствующие имена боба:

Так что вы получите это Map из Map с. Что даст вам свой собственный Map, но также и все другие бобы, которые могут быть выражены как Map или которые являются Map. Это касается большинства фасолей PropertySource, которые вы получаете в своем Map в фасоли. (systemEnvironment - все переменные среды) и так далее.

Чтобы исправить, добавьте @Qualifier("map") к вашему определению или используйте @Resource вместо @Autowired.

+0

Спасибо большое! @Qualifier действительно помогает. Теперь он работает правильно! –

Смежные вопросы