我正在尝试从引用bean获取映射键值。
我有两节课。一个包含两个Map,另一个需要从此类读取键值并设置一个自己的字段。
@Data
public class ClassOne{
private Map<String, Object> xxx;
private Map<String, Object> yyy;
}
@Data
public class ClassTwo{
private String zzz;
}
xml应用程序上下文
<bean id="ClassTwo" class="...">
<property name="zzz" value="#{ClassOne.${xxx['key']} == 'myString' ? 'otherString' : false}"></property>
</bean>
<bean id="ClassOne" class="...">
<property name="xxx" value=""></property>
</bean>
我的意图是引用bean ClassOne获取一个Map并通过键获取Map值
编辑:
对于此应用程序上下文,我正在获得
<bean id="ClassTwo" class="com.interns.pittaci.model.label.ClassTwo">
<!--- for property name zzz from ClassTwo set value based on map called xxx with key 'test' inside ClassOne -->
<property name="zzz" value="#{ClassOne.${xxx['test']} == 'test' ? 'test1 ' : test2}"></property>
</bean>
以下错误消息:
线程“主”中的异常 org.springframework.beans.factory.BeanDefinitionStoreException: 在类路径中定义了名称为“ ClassTwo”的无效bean定义 资源[applicationContext.xml]:无法解析占位符 值“#{ClassOne。$ {xxx ['test']}} =='test'?'test1'中的'xxx ['test']' :test2}“;嵌套异常是java.lang.IllegalArgumentException: 无法解析占位符'xxx ['test']'的值 “#{ClassOne。$ {xxx ['test']}} =='test'?'test1':test2}”
答案 0 :(得分:0)
我认为问题在于访问地图时使用了$ {},因为访问类属性时不必使用$ {}。尝试#{ClassOne.xxx['key'] == 'myString' ? 'otherString' : false}
除此之外,在映射中不存在键的情况下,application-context.xml中定义的三元运算符将返回一个布尔值,并尝试将其分配给String属性