f:setPropertyActionListener不设置值,但触发操作

时间:2013-04-08 09:57:29

标签: jsf primefaces

每当切换p:fieldset时,我都需要设置一个布尔字段。我尝试了下面的代码,但该字段永远不会被f:setPropertyActionListener设置,尽管p:ajax listener在切换时被调用。我尝试了以下代码。

    <p:fieldset legend="(Optional) Link.." toggleable="true">
        <p:ajax event="toggle" listener="..">
            <f:setPropertyActionListener target="#{viewScope.rendrUsrProjctsList}" value="#{true}"/>
        </p:ajax>
    </p:fieldset>

但是当我尝试修改下面的代码时,字段成功设置:

    <p:fieldset legend="(Optional) Link.." toggleable="true">
        <p:ajax event="toggle" listener="#{view.viewMap.put('rendrUsrProjctsList', true)}" />
        <p:ajax event="toggle" listener=".."/>
        </p:ajax>
    </p:fieldset>

我想问:

  1. 为什么第一种方式不起作用?
  2. 附加多个p:ajax是不是很糟糕 如第二种方式完成的单亲?

1 个答案:

答案 0 :(得分:9)

<f:setPropertyActionListener>仅适用于实施ActionListener界面的组件ActionSource实施,例如UICommand,即<h:commandXxx><p:commandXxx><p:ajax>没有实现此接口,因此<f:setPropertyActionListener>基本上完全被忽略。

至于你的解决方法,你可以这样做,虽然我宁愿只使用一个具体的视图范围的bean或将它包装在一个带有支持组件的复合中。