Java 为什么spring三元表达式得到相反的结果?

Java 为什么spring三元表达式得到相反的结果?,java,spring,ternary-operator,Java,Spring,Ternary Operator,我正在学习《行动中的春天》第三版 我正在阅读有关SpEL内部三元表达式的部分: 它写道: 如果你想让一个SpELexpression计算为一个值,如果 条件为真,否则为另一个值?例如,让我们 假设卡尔(早期的乐器演奏家)想弹钢琴 如果这首歌是《铃铛叮当》,但他会用萨克斯吹电话。 在这种情况下,可以使用SpEL的三元(?:)运算符: 如您所见,SpEL的三元运算符的工作原理与Java的相同 三元运算符。在这种情况下,将连接instrumentproperty 如果选择的歌曲是“叮当”,则参考钢

我正在学习《行动中的春天》第三版

我正在阅读有关SpEL内部三元表达式的部分:

它写道:

如果你想让一个SpELexpression计算为一个值,如果 条件为真,否则为另一个值?例如,让我们 假设卡尔(早期的乐器演奏家)想弹钢琴 如果这首歌是《铃铛叮当》,但他会用萨克斯吹电话。 在这种情况下,可以使用SpEL的三元(?:)运算符:


如您所见,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" />