Java 为什么spring三元表达式得到相反的结果?
我正在学习《行动中的春天》第三版 我正在阅读有关SpEL内部三元表达式的部分: 它写道: 如果你想让一个SpELexpression计算为一个值,如果 条件为真,否则为另一个值?例如,让我们 假设卡尔(早期的乐器演奏家)想弹钢琴 如果这首歌是《铃铛叮当》,但他会用萨克斯吹电话。 在这种情况下,可以使用SpEL的三元(?:)运算符:Java 为什么spring三元表达式得到相反的结果?,java,spring,ternary-operator,Java,Spring,Ternary Operator,我正在学习《行动中的春天》第三版 我正在阅读有关SpEL内部三元表达式的部分: 它写道: 如果你想让一个SpELexpression计算为一个值,如果 条件为真,否则为另一个值?例如,让我们 假设卡尔(早期的乐器演奏家)想弹钢琴 如果这首歌是《铃铛叮当》,但他会用萨克斯吹电话。 在这种情况下,可以使用SpEL的三元(?:)运算符: 如您所见,SpEL的三元运算符的工作原理与Java的相同 三元运算符。在这种情况下,将连接instrumentproperty 如果选择的歌曲是“叮当”,则参考钢
如您所见,SpEL的三元运算符的工作原理与Java的相同
三元运算符。在这种情况下,将连接instrumentproperty
如果选择的歌曲是“叮当”,则参考钢琴音箱
否则,它将与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" />
输出:
演奏铃铛:嘟嘟嘟嘟
这是不正确的,应该是:
播放铃铛叮当声:叮当声叮当声粉色
我已经检查了测试是否使用了正确的xml,是否得到了正确的bean,以及仪器的声音是否正确。(萨克斯管用嘟嘟嘟嘟,钢琴用PLINK PLINK粉红色)
有什么想法吗?谢谢。我猜您正在尝试引用尚未设置的属性。即使它是在XML中三元表达式中的引用“之前”设置的,但很可能在对SpEL表达式求值时,尚未设置该属性。例如,见 如果在设置<代码>歌曲之前设置了
乐器
,则您看到的行为是有意义的
(您可以将日志语句添加到setter中,以确定经验调用顺序。)是JSP吗?如果是这样的话,请这样标记。没有jsp,只需使用spring和xml进行pojo。如果将
p:song
转换为
,结果是相同的。
<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" />