有条件地在h:setPropertyActionListener上设置目标属性

时间:2013-10-16 08:47:40

标签: jsf

我有一个h:commandButton需要在bean中设置一个属性。根据变量的值,我可能需要设置不同的属性。这是我试过的代码

<h:commandButton value="Procedi">
    <f:ajax event="click" />
    <f:setPropertyActionListener
        target="#{comparisonSide eq 'Left' ? compareManaged.optionalLeft : compareManaged.optionalRight}"
        value="#{comparisonSide eq 'Left' ? optionalManaged.selectedOptionalsLeft : optionalManaged.selectedOptionalsRight }" />
</h:commandButton>

这似乎不起作用,因为我试图在target的{​​{1}}属性中使用的语法(也就是说,你不能在那里使用三元运算符)。

有没有办法实现这种条件定位而不会使用setPropertyActionListener乱丢我的代码?

P.S。如果这有帮助,我正在使用myfaces和richfaces。

1 个答案:

答案 0 :(得分:0)

正如您在评论中明确指出的那样,问题是target属性确定了设置值的属性,而JSF无法找到它。

您可以在两个单独的<f:setPropertyActionListener>实例中拆分这两个属性更新,并且每个操作侦听器都会使用相关值更新相关属性。

<f:setPropertyActionListener
    target="#{compareManaged.optionalLeft}"
    value="#{comparisonSide eq 'Left' ? optionalManaged.selectedOptionalsLeft : '' }" />
<f:setPropertyActionListener
    target="#{compareManaged.optionalRight}"
    value="#{comparisonSide eq 'Left' ? '' : optionalManaged.selectedOptionalsRight }" />

您当然也可以直接在您的操作或actionlistener方法中完成这项工作。