【发布时间】:2012-08-15 10:44:30
【问题描述】:
我正在阅读 Spring in Action 第 3 版这本书来学习 Spring。
我正在阅读关于 SpEL 中的三元表达式的部分:
它写道:
如果您希望 SpEL 表达式计算为一个值,如果 条件为真,否则为不同的值?例如,让我们 说卡尔(之前的乐器演奏家)想弹钢琴 如果这首歌是“铃儿响叮当”,否则他会演奏萨克斯风。 在这种情况下,您可以使用 SpEL 的三元 (?:) 运算符:
<property name="instrument"
value="#{songSelector.selectSong()=='Jingle Bells'?piano:saxophone}"/>
如您所见,SpEL 的三元运算符的工作方式与 Java 的相同 三元运算符。在这种情况下,仪器属性将被连接 如果选择的歌曲是“Jingle”,则参考钢琴豆 钟声。”否则,它将与 IDis 萨克斯管的 bean 连接。
我使用以下 xml 实现它:
<bean id="kenny"
class="com.springinaction.springidol.Instrumentalist"
p:song="Jingle Bells">
<property name="instrument"
value="#{kenny.song == 'Jingle Bells' ? piano:saxophone}"/>
</bean>
<bean id="piano"
class="com.springinaction.springidol.Piano" />
<bean id="saxophone"
class="com.springinaction.springidol.Saxophone" />
输出:
播放铃儿响叮当:嘟嘟嘟
这是不正确的,应该是:
播放铃儿响叮当:PLINK PLINK PINK
我检查了测试使用了正确的 xml 并获得了正确的 bean,并且仪器的声音是正确的。 (萨克斯管用 TOOT TOOT TOOT,钢琴用 PLINK PLINK PINK)
有什么想法吗?谢谢。
【问题讨论】:
-
看起来是 JSP 吗?如果是这种情况,请标记为这样。
-
没有jsp,只是用spring和xml pojo。
-
如果您从
p:song转换为<property name="song" value="Jingle Bells"/>会怎样? -
@EmilSit 结果是一样的。
标签: java spring ternary-operator